将IntPtr窗口句柄转换为IWin32Window ^

时间:2010-03-20 03:48:54

标签: c++-cli handle

如何将从表单/控件的Handle属性获取的句柄转换为IWin32Window ^?

3 个答案:

答案 0 :(得分:23)

Control.FromHandle

(这将获得Control对象,它实现了IWin32Window接口。)

例如

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

请注意,这取决于“从表单/控件的Handle属性中获取”句柄。您不能将此技术用于任意Win32窗口句柄。

答案 1 :(得分:23)

.NET框架直接支持一种更简单的方法,而无需创建自己的自定义类。您可以将其与任意任意窗口句柄一起使用。

给出类型 IntPtr ptrWindowHandle

using System.Windows.Forms;

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

System.Windows.Forms.NativeWindow 实现 IWin32Window 界面。

答案 2 :(得分:7)

这似乎正是您所要求的。我自己从未这样做过,但似乎相对简单:

Creating a IWin32Window from a Win32 Handle

祝你好运!