SendMessage,PostMessage

首先講這兩個函數的區別。SendMessage是阻塞的。PostMessage不是的。SendMessage會等

發去的消息被處理了才返回。PostMessage則只負責把消息放到相應的消息隊列中就返回了,

它不必等待消息的處理。

在使用上有一個要注意的地方。

在MFC中每個從CWnd繼承來的類,都有兩個成員函數SendMessage,PostMessage。

在Windows SDK中也有兩個函數SendMessage,PostMessage。這是有區別的。

下面均以PostMessage爲例來說明。

Windows SDK中的PostMessage有四個參數

BOOL PostMessage(

   HWND hWnd,

   UINT Msg,

   WPARAM wParam,

   LPARAM lParam

);

但是CWnd的成員函數PostMessage只有三個參數

BOOL PostMessage(

   UINT message,

   WPARAM wParam = 0,

   LPARAM lParam = 0

);

Windows SDK中的PostMessage的第一個參數就是發送消息的目的窗口的句柄。

而CWnd的PostMessage則把消息發送到本窗口對象的消息隊列裏。

前面有位同學的關於消息的提問,說他發送的消息,收不到,就是沒有注意到這些區別。

它直接使用成員函數PostMessage就想把菜單消息發送到另一個窗口中,讓處理菜單命令的

那個窗口處理菜單消息,顯然消息是發送到了本窗口對象的消息隊列裏,而本窗口對象又不

處理該菜單命令。

正確的使用方法應該是:

(1)用目的窗口對象的成員函數PostMessage

(2)使用SDK中的PostMessage,並在第一個參數上寫上目的窗口的句柄

    比如:PostMessage(pWnd->GetSafeHwnd(),......

    需要注意的是,這時候最好寫成::PostMessage(pWnd->GetSafeHwnd(),......形式


    以區別成員函數PostMessage。::的意思不用講了吧,如果不懂,看C++去吧
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章