天天看点

PreTranslateMessage 与 WindowProc

MFC中PreTranslateMessage是GetMessage(...)函数的下一级操作,即GetMessage(...)从消息队列中获取消息后,交由PreTranslateMessage()处理,若其返回FALSE则再交给TranslateMessage和DispatchMessage处理(进入WindowProc);

如果用SendMessage, 则消息直接交到WindowProc处理,所以GetMessage不会取得SendMessage的消息,当然PreTranslateMessage也就不会被调用。

如果用PostMessage,则消息进入消息队列,由GetMessage取得,PreTranslateMessage就有机会进行处理。

SendMessage要区分环境,如果是对本线程的窗口SendMessage,则不经过任何消息循环,也不放入消息队列,直接调用WindowProc,所以GetMessage和PreTranslateMessage都捕获不到;如果SendMessage是向其它线程或其它进程的窗口发消息,则消息进入消息队列,GetMessage和PreTranslateMessage能捕获到这个消息。