PreTranslateMessage是
消息在送給TranslateMessage函數(shù)之前被調(diào)用的,絕大多數(shù)本窗口的消息都要通過這里,比較常用,當(dāng)你需要在MFC之前處理某些消息時(shí),常常要在這里添加代碼.
MFC消息控制流最具特色的地方是CWnd類的虛擬函數(shù)PreTranslateMessage(),通過重載這個(gè)函數(shù),我們可以改變MFC的消息控制流程,甚至可以作一個(gè)全新的控制流出來。只有穿過消息隊(duì)列的消息才受PreTranslateMessage()影響,采用SendMessage()或其他類似的方式向窗口直接發(fā)送的而不經(jīng)過消息隊(duì)列的消息根本不會(huì)理睬PreTranslateMessage()的存在。
一、是否調(diào)用TranslateMessage()和DispatchMessage()是由一個(gè)名稱為PreTranslateMessage()函數(shù)的返回值決定的,如果該函數(shù)返回TRUE,則不會(huì)把該消息分發(fā)給窗口函數(shù)處理。
二、傳給PreTranslateMessage()的消息是未經(jīng)翻譯過的消息,它沒有經(jīng)過TranslateMessage()處理。可以在該函數(shù)中使用(pMsg->wParam==VK_RETURN)來攔截回車鍵。
三、在WindowProc里不能處理WM_Char消息。
四、SetWindowText會(huì)發(fā)送WM_Char給窗口。
五、PeekMessage和GetMessage的區(qū)別:
GetMessage在沒有消息的時(shí)候等待消息,cpu當(dāng)然低
PeekMessage沒有消息的時(shí)候立刻返回,可以在沒有消息的時(shí)候可以做其他處理,但cpu占用率一般較高。
大多游戲都用PeekMessage();
http://baike.baidu.com/view/1437305.htm