неправильно закрывается из события закрытия панели задач - PullRequest
0 голосов
/ 08 августа 2011

Если я закрою свое приложение с помощью Alt-F4, или угловой кнопки «X», или отправив destroywindow (hwnd) самостоятельно, приложение закроется правильно, и все будет работать так, как ожидалось.

но недавно я понял, что в Windows7, когда я закрываю приложение, щелкая правой кнопкой мыши по значку на панели задач и нажимая «Закрыть окно», окно закрывается, но мое приложение все еще работает. при отладке я не попадаю ни в одно из событий WM_QUIT / DESTROY / CLOSE.

Есть ли какое-то особое поведение при закрытии окна через панель задач? как я могу обнаружить это?

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Вы должны получить WM_CLOSE.Может быть, вы получаете это в другом окне, которое вы ожидаете?Хотя это не должно произойти, если у вас не несколько окон верхнего уровня.

1 голос
/ 08 августа 2011

через Alt-F4, или угловую кнопку "X", или отправив destroywindow (hwnd) самостоятельно

Вы не можете опубликовать DestroyWindow (). Убедитесь, что процедура окна вашего главного окна похожа на это:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    // Other cases
    //...
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

Вызов функции PostQuitMessage () гарантирует, что ваш цикл сообщений завершается, GetMessage () возвращает FALSE, когда получает сообщение WM_QUIT. Это заставляет ваше главное окно вести себя как главное окно, закрытие его завершает процесс. У вас могут быть другие окна верхнего уровня, которые не имеют, у них не должно быть этого обработчика сообщений WM_DESTROY. DestroyWindow () уже вызывается автоматически DefWindowProc () при обработке сообщения WM_CLOSE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...