在下面的代码中,从调用CreateWindowW()
返回的句柄的全局赋值似乎超出了范围。我无法在InitInstance()
之外访问它。当我将赋值移到WinProc()
时,它仍然在我访问的其他函数的作用域中。
HWND hWndTop; // Handle to top window
.
.
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
.
.
HWND hWnd = CreateWindowW(szWindowClass,....
hWndTop = hWnd; // This did not work.
.
.
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
hWndTop = hWnd; // This did work.
.
.
}
…只是你的
WndProc
在InitInstance
可以设置其值之前试图使用hWndTop
。换句话说,问题不是"我给hWndTop
的任务被撤销了"。问题是"我给hWndTop
的分配还没有发生"。——陈志强
CreateWindow()
将在退出InitInstance()
之前向WndProc()
发送一些消息,例如WM_(NC)CREATE
,WM_GETMINMAXINFO
等。因此,hWndTop
还没有为WndProc()
接收到的每条消息设置- Remy Lebeau