Преобразование дескриптора окна IntPtr в IWin32Window ^

Как преобразовать дескриптор, полученный из свойства Handle формы/управления, в IWin32Window ^?

Ответы

Ответ 1

Control.FromHandle

(Это дает вам объект Control, который реализует интерфейс IWin32Window.)

Eg.

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

Обратите внимание, что это зависит от того, что дескриптор "получен из свойства формы/управления Handle". Вы не можете использовать эту технику с помощью дескриптора окна Win32.

Ответ 2

Существует более простой метод, поддерживаемый непосредственно платформой .NET без необходимости создания собственного пользовательского класса. Вы можете использовать это с любым произвольным дескриптором Window.

Учитывая ptrWindowHandle типа IntPtr:

using System.Windows.Forms;

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

System.Windows.Forms.NativeWindow реализует интерфейс IWin32Window.