當我從MSDN documentation on Windows Data Types明白,一個HWND
相當於void*
:分配的任意地址到HWND
HWND - 一個句柄的窗口。這種類型在WinDef.h中聲明如下:typedef HANDLE HWND; 手柄 - 一個對象的句柄。這種類型在WinNT.h中聲明如下:typedef PVOID HANDLE; PVOID - 指向任何類型的指針。這種類型在WinNT.h中聲明如下:typedef void * PVOID;
但是,如果我嘗試以下方法:
int foo;
HWND bar = &foo;
我的編譯器(VS2012)抱怨:
error C2440: '=' : cannot convert from 'int *' to 'HWND'
Types pointed to are unrelated; conversion requires reinterpret_cast,
C-style cast or function-style cast
我想不通的原因所在。我已經確定,因爲下面編譯罰款它不涉及到使用類型定義的:
typedef void* MyType;
int foo;
MyType bar = &foo;
什麼阻止我指定的任意對象的地址到HWND
?
我想這樣做的原因,如果有人反對我試圖做到這一點,是我有一些代碼涉及HWND
s,我想通過提供HWND
s與已知的單元測試我可以測試的值。
爲什麼想要的東西分配給HWND變量這顯然不是窗口的句柄? – selbie
@selbie我已經在我的問題的最後一段回答了這個問題。 – JBentley