如何从System.Windows.Forms.Form中获取HWND句柄

mri*_*ing 16 handle visual-studio visual-c++ winforms

鉴于形式

System.Windows.Forms::Form Form1;
Run Code Online (Sandbox Code Playgroud)

和窗口句柄

HWND hWnd;
Run Code Online (Sandbox Code Playgroud)

我如何将hWnd设置为Form1的Handle属性,该属性确实作为公共属性存在"获取控件绑定的窗口句柄.(继承自Control.)"根据System.Windows.FormsMicrosoft文档::表格?在Form Form1的构造函数中,我试过了

hWnd = this.Handle;
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨:

错误C2228:'.Handle'的左边必须有class/struct/union类型是'MyNamespace :: Form1 ^ const'你打算用' - >代替吗?

所以我试试

hWnd = this->Handle;
Run Code Online (Sandbox Code Playgroud)

只是

hWnd = Handle; // Since I'm in the Form
Run Code Online (Sandbox Code Playgroud)

然后编译器说:

错误C2440:'=':无法从'System :: IntPtr'转换为'HWND'没有可用于执行此转换的用户定义转换运算符,或者无法调用运算符

mri*_*ing 21

我找到了一个解决方案,并不关心它是否是一个kludge.

hWnd = static_cast<HWND>(Handle.ToPointer());
Run Code Online (Sandbox Code Playgroud)

作品.

  • 据我所知,这是正确的方法. (2认同)