Я хотел зачитывать сообщения в моем цикле сообщений прямо перед отправкой их в свою оконную процедуру. Большинство сообщений, которые я пытался читать таким образом, были прочитаны правильно, но когда я закрывал окно, сообщение WM_CLOSE
или WM_DESTROY
не могло быть прочитано, так как казалось, что они никогда не были получены. Вот что я делаю:
void Framework::Run(){
while(running){
MSG msg;
while(PeakMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
switch(msg.message){
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_QUIT:
running = false;
break;
//...other cases...
}
DispatchMessage(&msg);
}
//...
}
}
Я ставлю точку останова в первом случае, но даже когда я закрываю окно (нажав «X»), точка останова никогда не срабатывает. Хотя, когда я проверяю WM_DESTROY
в оконной процедуре, она считывается, и все идет нормально. Почему не вне его?
Отправляются ли такие сообщения непосредственно в оконный процесс? Как?
GetMessage
возвращает0
наWM_QUIT
, поэтому ваш цикл сообщений может вообще не оцениваться. - person Csq   schedule 28.09.2014PeakMessage
нет. ЭтоPeekMessage
. Ваш цикл сообщений занят циклом. Я не знаю, почему вы отверглиGetMessage
. Синхронные сообщения, такие какWM_DESTROY
иWM_CLOSE
, отправляютсяPeekMessage
,GetMessage
и т. д.PeekMessage
,GetMessage
возвращают асинхронные сообщения. - person David Heffernan   schedule 28.09.2014