PreTranslateMessage的理解:
PreTranslateMessage只能處理消息隊列中的消息,也就是由PostMessage發出的消息/鼠標鍵盤消息等.
SendMessage發送的消息并不放在消息隊列中,而是直接調用處理函數進行處理,所以這種消息用PreTranslateMessage的捕獲不到的,如WM_KIllFOCUS和WM_SETFOCUS.
SendMessage的消息是直接執行處理函數的,它要等消息執行完才返回(執行完SendMessage函數);而PostMessage則把消息發送后立即返回,把消息掛到消息隊列中等待執行,所以以下的程序是錯的!!
#include <windows.h>
int main()
{
PostMessage(HWND_BROADCAST,WM_QUIT,0,0);
return 0;
}
PostMessage將消息WM_QUIT發送到消息隊列中,由于PostMessage的立即返回(即結束)就執行下一句語句結束整個程序,消息還掛在消息隊列中未處理故出錯!!