1 GetMessage 从消息队列中删除消息,无消息时阻塞线程;也可以说它是同步的;
如果函数取得WM_QUIT消息,返回值是零
2 PeekMessage
总结1:PeekMessage 查询消息队列,有消息就取出,没有消息就返回;也可以说它是异步的;是否从消息队列中删除消息由其最后一个参数决定,如果是 PM_REMOVE 删除,PM_NOREMOVE 则不删除;
总结2:Peek Message 的性质决定,其需要对 WM_QUIT 消息进行单独检查
while (TRUE)
{
if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) // PM_REMOVE,相当于异步GetMessage
{
if (msg.message == WM_QUIT) ////其不能移除 WM_PAINT 消息,但 GetMessage 也不从消息队列中删除这个消息
break ;
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
else
{
DrawRectangle (hwnd) ;
}
return msg.wParam ;
}