windows消息和消息队列
在windows系统中,每个线程都对应一个消息队列(Message Queue),这是系统自动创建的。所以,如果想让窗口程序响应鼠标键盘操作的话,就要从这个消息队列里取得消息,然后根据消息做相应的响应函数。一般的做法是写一个消息循环(Message Loop),不断的从消息队列里提取消息、处理消息,直到程序退出。msdn给出的例子是这样写的:
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
if (hwndDlgModeless == (HWND) NULL ||
!IsDialogMessage(hwndDlgModeless, &msg) &&
!TranslateAccelerator(hwndMain, haccel,
&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
其中的GetMessage就是负责从消息队列中取得一个消息,它的原型如下
GetMessage( LPMSG lpMsg, HWND hWnd,UINT wMsgFilterMin, UINT wMsgFilterMax )