在做基於窗口的Windows程序的時候,我們避免不了要向窗口發送消息,有兩種方式,一種是PostMessage,另外一種是SendMessage。關於這兩個宏,我是通過狠狠的看MSDN才搞明白的,那裏講的是最權威的。它們的區別如下:
1、PostMessage會將消息壓入窗口所在線程的消息隊列,然後返回;而SendMessage則不經過消息隊列,SendMessage可認爲是直接調用了該窗口的窗口過程,因此在我們需要獲得消息處理後的返回值的時候,就要用到SendMessage。
例如:當在程序中指定如下使用:PostMessage(hWnd, WM_MSG,0,0),那麼當程序執行到PostMessage的時候,僅將消息WM_MSG壓入到創建hWnd所指窗口的那個線程的消息隊列,然後程序將繼續執行下去,而至於程序什麼時候響應該消息,則要看那個線程什麼時候得到控制權;
而指定如下使用:SendMessage(hWnd, WM_MSG,0,0),那麼當程序執行到該處時,將發生一次跳轉:從當前位置,跳轉到hWnd的窗口過程中去響應WM_MSG消息,當消息處理結束,窗口過程返回,程序又將從SendMessage後面繼續執行,當然,我們可以獲得窗口過程對該消息的處理結果,也即取SendMessage的返回值。(這裏只是針對單線程)。
RelpyMessage(lResult);
即判斷:如果該消息是發自另外一個線程,則立即 RelpyMessage,回覆消息,參數lResult即是返回值。而如果是在同一個線程內,則InSendMessage()將會返回FALSE。