我正在使用Win32 API创建窗口,这部分我遇到了问题:
GetMessage(&message, NULL, 0, 0);我的问题是,当我试图更改第二个参数(hwnd),它将接收到我以前创建的窗口的消息时,它不起作用;例如,当我试图关闭窗口时,它只隐藏而不关闭。
以下是完整的代码:
#include <windows.h>
LRESULT CALLBACK WinProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS window;
window.cbClsExtra = NULL;
window.cbWndExtra = NULL;
window.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
window.hCursor = LoadCursor(hInst, IDC_ARROW);
window.hIcon = NULL;
window.hInstance = hInst;
window.lpfnWndProc = WinProc;
window.lpszClassName = "WINDOW";
window.lpszMenuName = NULL;
window.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&window);
HWND hwnd = CreateWindow("WINDOW", "Win32 Window Application", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, NULL, NULL, hInst, NULL);
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
MSG message;
while (GetMessage(&message, NULL, 0, 0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
return 1;
}
LRESULT CALLBACK WinProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CLOSE:
{
PostQuitMessage(0);
break;
}
default:
break;
}
return DefWindowProc(window, message, wParam, lParam);
}发布于 2014-04-26 11:44:29
“.当我试图更改第二个参数(hwnd),它将接收到我以前创建的窗口的消息时,它无法工作。”
线程消息不被发送到窗口;它们被发布到带有空窗口句柄的线程消息队列中,并且不会使用针对特定窗口句柄的GetMessage()循环来捕获。
例:PostQuitMessage()发布线程消息,而不是窗口消息。你需要空值。来自GetMessage()文档:
如果hWnd为NULL,则GetMessage将检索属于当前线程的任何窗口的消息,以及当前线程消息队列中hwnd值为空的任何消息(请参见MSG结构)。因此,如果hWnd为NULL,则同时处理窗口消息和线程消息。
https://stackoverflow.com/questions/23310136
复制相似问题