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