WINAPI GetMessage HWND

Я работаю над созданием окна с 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);
}

2

Решение

«… когда я пытаюсь изменить второй параметр (hwnd), который будет получать сообщения в окно, которое я сделал ранее, это не сработает».

Сообщения потока не отправляются окну; они публикуются в очереди сообщений потока с дескриптором окна NULL и НЕ будут забираться с GetMessage() цикл с учетом дескриптора окна.

Пример: PostQuitMessage() отправляет нить сообщение; не оконное сообщение. Вам нужен NULL. От GetMessage() документы:

Если hWnd равен NULL, GetMessage извлекает сообщения для любого окна, принадлежащего текущему потоку, и любых сообщений в очереди сообщений текущего потока, чье значение hwnd равно NULL (см. Структуру MSG). Поэтому, если hWnd NULL, оба сообщения окна и поток сообщений обрабатываются.

6

Другие решения


По вопросам рекламы [email protected]