2010-03-20 16 views

cevap

23

Control.FromHandle

(Bu sana IWin32Window arabirimini uygulayan Kontrol nesnesi, alır.)

Örn.

IntPtr myWindowHandle = IntPtr(someVal); 
IWin32Window^ w = Control::FromHandle(myWindowHandle); 

Bunun, "bir formun/denetimin Handle özelliğinden alınan" tanıtıcıya dayanması gerektiğini unutmayın. Bu tekniği rasgele bir Win32 penceresi tanıtıcısıyla kullanamazsınız.

+0

James, cevabınıza bir nitelendirme düzenledim çünkü burada daha genel bir arama olan IntPtr ve 'IWin32Window 'dan gelen kişiler soru başlığını okuyabilir ve soru detayındaki kısıtlamayı takdir etmeyebilirler. Umarım bu iyidir. – itowlson

+0

Hayır, bu iyi bir düzenleme. Muhtemelen bazı huzursuz geleceğin programlayıcılarını, saatlerce süren kafa çiziklerinden, neden gerçek bir HWND'den bir Kontrol/IWin32Window nesnesi oluşturamadığını merak ettiniz. :) –

20

Kendi özel sınıfınızı oluşturmak zorunda kalmadan doğrudan .NET çerçevesi tarafından desteklenen daha basit bir yöntem var. Bunu, herhangi bir rasgele Pencere tanıtıcısıyla kullanabilirsiniz.IWin32Window arabirimini uygulayan

using System.Windows.Forms; 

NativeWindow nativeWindow = new NativeWindow(); 
nativeWindow.AssignHandle(ptrWindowHandle); 

System.Windows.Forms.NativeWindow:

tip ıntptr ait ptrWindowHandleVerilen.

+14

Ayrıca sadece Statik NativeWindow.FromHandle (ptrWindowHandle); ' –

+0

@MattSmith de kullanabilirsiniz. AssignHandle önceden kullanılmadığı sürece FromHandle benim için çalışmaz. Örneğin bu çalışır: NativeWindow nativeWindow = new NativeWindow(); nativeWindow.AssignHandle (GetConsoleWindow()); box.ShowDialog (NativeWindow.FromHandle (GetConsoleWindow())); '(hatta box.ShowDialog (nativeWindow);') ... ama bu tek liner atama olmadan: 'box.ShowDialog (NativeWindow. FromHandle (GetConsoleWindow())); ' – Jay

İlgili konular