Win32: Что заставляет мой цикл сообщений работать неправильно в этом примере? - PullRequest
1 голос
/ 16 декабря 2010

Недавно я столкнулся с ситуацией, когда я хотел использовать немодальный диалог в Win32.

Win32: диалоговое окно панели инструментов, кажется, никогда не фокусируется и заставляет главное окно работать медленно!

И я понял, что это был мой цикл сообщений:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
    // Doing required stuff here...

    while (GetMessage(&Msg, hWnd, 0, 0) > 0) {
        // Processing messages here...
    }
}

Фактически, этот цикл сообщений работает нормально, пока у меня нет немодального диалога, так как он прекрасно работает с модальными диалогами, поскольку они обрабатывают свой собственный цикл сообщений. Мой немодальный диалог работал безупречно, когда я заменил экземпляр hWnd на NULL. Я просто не вижу разницы, за исключением того, что кажется, что я получаю сообщения не для одного конкретного окна.

Может кто-нибудь объяснить, что делает этот цикл сообщений некорректным?

Как этот:

while (GetMessage(&Msg, NULL, 0, 0) > 0) {
    // Processing messages here...
}

работает без нареканий!

1 Ответ

3 голосов
/ 17 декабря 2010

разница довольно очевидна: вы указали HWND в GetMessage. Таким образом, вы не обрабатываете никаких сообщений для других окон, включая вашу панель инструментов. См. Документы для GetMessage

...