【发布时间】:2011-01-29 17:22:46
【问题描述】:
如何将从窗体/控件的 Handle 属性获取的句柄转换为 IWin32Window^?
【问题讨论】:
如何将从窗体/控件的 Handle 属性获取的句柄转换为 IWin32Window^?
【问题讨论】:
(这将为您提供实现 IWin32Window 接口的 Control 对象。)
例如。
IntPtr myWindowHandle = IntPtr(someVal);
IWin32Window^ w = Control::FromHandle(myWindowHandle);
请注意,这依赖于“从表单/控件的 Handle 属性获取”的句柄。您不能将此技术用于任意 Win32 窗口句柄。
【讨论】:
IntPtr 和IWin32Window 进行更一般搜索的人可能只会阅读问题标题,而不会理解问题细节中的限制。希望这没问题。
.NET 框架直接支持一种更简单的方法,无需创建您自己的自定义类。您可以将它与 any 任意窗口句柄一起使用。
给定 ptrWindowHandle 类型为 IntPtr:
using System.Windows.Forms;
NativeWindow nativeWindow = new NativeWindow();
nativeWindow.AssignHandle(ptrWindowHandle);
System.Windows.Forms.NativeWindow 实现了 IWin32Window 接口。
【讨论】:
NativeWindow.FromHandle(ptrWindowHandle);
NativeWindow nativeWindow = new NativeWindow(); nativeWindow.AssignHandle(GetConsoleWindow()); box.ShowDialog(NativeWindow.FromHandle(GetConsoleWindow()));(甚至box.ShowDialog(nativeWindow);)...但是没有分配的这一行不行:box.ShowDialog(NativeWindow.FromHandle(GetConsoleWindow()));
【讨论】: