for(;;)
{
if(PeekMessage(&iMsg,NULL,0,0,PM_NOREMOVE))
{
if(!GetMessage(&iMsg,NULL,0,0))
return iMsg.wParam;
TranslateMessage(&iMsg);
DispatchMessage(&iMsg);
}
else
WaitMessage();
}
PeekMessage 看看消息堆栈中有没有消息。不管有没有,获取结果以后,立即返回(不阻塞)。
GetMessage 看看消息堆栈,如果有消息,就读取消息返回,同时清除这条消息;如果没有消息,
就等待,知道消息堆栈中有消息了再返回。
WaitMessage 不常用,它综合了上面2个函数的功能,它是查看消息堆栈,如果没有消息,就挂起
当前线程阻塞,切换到别的线程,直到堆栈有消息为止。
for( ; ; ) 是一个死循环,目的是不断的从消息队列中取消息;
而 PeekMessage( );如果消息队列中有消息的话,就把它放到消息队列,
如果没有则 else 的 WaitMessage( )(是当没有消息的时候,就终止主线程);
而 GetMessage( ) 获取消息,
TranslateMessage( ) 用途是将虚拟建的消息翻译成可识别的消息;
DispatchMessage( ) 用途是将消息发送到指定窗口;
PeekMessage( ) 当没消息的时候,会返回一个NULL;
而 GetMessage( ) 当没有消息的时候,会让程序处于休眠状态,
在这个程序中用 PeekMessage( ) 为空的时候,程序就进入了 WaitMessage( ) 而他会终止线程