2008-09-25 10 views
8

Başka bir dış Uygulama (.NET ile ilgili olmayan, salt Win32 değil) için bir TopMost Formu olarak bir .NET Formu oluşturmak istiyorum, bu nedenle bu Win32App'in üstünde kalır, ancak geri kalanını değil. çalışan uygulamalar.Pencere Sahibi, tanıtıcısı kullanılarak nasıl değiştirilir

Win32App (Win32App'ın kendisi tarafından sağlanan) tanıtıcısı var ve P/Invoke in C# aracılığıyla Win32 SetParent() function denedim, ancak sonra benim .NET formum Win32App içine alır ve istediğim bu değil.

cevap

12

ben aradığınız düşünüyorum/P çağır SetWindowLongPtr(win32window, GWLP_HWNDPARENT, formhandle)

Google Search

+1

Sorun, "windows parent değiştir" yerine "windows sahibini değiştir" sözcüğüyle çalıştım. :) –

+11

msdn belgelerinde aşağıdakileri okuyana kadar, yanlış bir soruya cevap verdiğini düşünerek bu yanıtı birkaç kez geçtim: "" Bir alt pencerenin üst öğeyi değiştirmek için GWL_HWNDPARENT diziniyle SetWindowLong'u aramamalısınız. Bunun yerine, SetParent işlevini kullanın. "Bu ifade yanıltıcı. GWL_HWNDPARENT, bir pencerenin üst öğeyi değil, SAHİBİ değiştirir. Bu amaçla kullanmak güvenlidir." – bj0

2

Evet ise! Zaten bir P/Invoke içe aktarma SetWindowLongPtr (x64 güvenli) var. Ve (get_Owner (Form değeri) yöntemi yani) Form.Owner mülkiyet üzerine arandı ve

SetWindowLongPtr(childHdl, -8, OwnerHdl) 

ben -8 (0xFFFFFFFFFFFFFFF8) benden önce ne anlama geldiğini arıyordu ile sahibini değiştirmek için yönetilen yansıtıcı kullanarak Çözümü burada yayınla, ama Joel çoktan işaret etti.

Teşekkürler!

İlgili konular