代码:
BOOL done = FALSE;
do {
if (PeekMessage(&msg,&hWnd,0,0,PM_REMOVE)){
if(msg.message==WM_QUIT){
done = TRUE;
}else{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}else{
RenderScreen();
}
} while (!done);
//****************************************************
原因分析:
一般情况下,在窗口的循环里会有这样的语句:
case WM_DESTROY:
PostQuitMessage(0);
return 0;
在窗口hWnd向主程序PostQuitMessage后,hWnd的消息队列没有了,再去PeekMessage(&msg,&hWnd,0,0,PM_NOREMOVE)对窗口取WM_QUIT消息时已经取不到任何消息。所以,需要将PeekMessage改为取程序的所有消息即可取出WM_QUIT,将第二个参数改为NULL即可
PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)