WM_CLOSE в модальном цикле сообщений - PullRequest
2 голосов
/ 17 августа 2011

Я использую специальный цикл сообщений для настраиваемого диалогового окна. Когда диалоговое окно открыто и окно закрыто, я хотел бы достичь второго, если ниже, если (msg.message == WM_CLOSE).

for(;;)
{
    if(PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE))
    {
        if(msg.message == WM_CLOSE)
        {
            GetMessage(&msg, 0, 0, 0);
            break;
        }

        else
        {
            if(GetMessage(&msg, 0, 0, 0))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }

            if(msg.message == msgEnd)
                break;
        }
    }

Проблема в том, что код в этом случае никогда не достигается. Я попытался заменить WM_CLOSE другим сообщением, чтобы увидеть, была ли проблема в цикле, но другое сообщение работало нормально. Что не так?

1 Ответ

3 голосов
/ 17 августа 2011

Похоже, что WM_CLOSE отправлено, а другое сообщение отправлено.

GetMessage и PeekMessage работают только с опубликованными сообщениями (сообщения, отправленные с PostMessage).Если сообщение не опубликовано, но отправлено с помощью SendMessage, оно обрабатывается непосредственно внутри PeekMessage или GetMessage, поэтому вы не можете получить MSG struct для него.

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