MINIGUI 中 GetMessage、TranslateMessage、DispatchMessage
消息循环:
while (GetMessage(&Msg, hMainWnd)) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
分析:
GetMessage从消息队列中获取击键消息。
TranslateMessage把该消息转换成MSG_CHAR消息,这个消息是新产生的,并把该消息传送到窗口过程,注意:TranslateMessage并没有改变原击键消息。
DispatchMessage将击键消息原封不动的传送给窗口过程。并回调窗口过程函数。
处理击键消息和字符消息的基本规则是:如果需要读取输入到窗口的键盘字符, 那么用户可以处理 MSG_CHAR 消息。如果需要读取游标键、功能键、 Delete、 Insert、 Shift、 Ctrl 以及 Alt 键,那么用户可以处理 MSG_KEYDOWN 消息
总结:在消息循环中,窗口过程会先收到 击键消息转换生成的信的消息MSG_CHAR消息,再收到原封不动的击键消息,又由于上面的“处理击键消息和字符消息的基本规则“,因此,收到的击键消息(除了处理规则中的那几种键)用户不予处理,直接交给缺省处理函数,如:return DefaultMainWinProc(hWnd, message, wParam, lParam);等;