【本文參考自網絡,參考地址:https://blog.csdn.net/lsyyoyo/article/details/38726419】
1、在公共的頭文件中添加一個宏定義: #define WM_TEST WM_USER+101 //用戶消息 用來綁定PostMessage和自定義的消息響應函數
// 這里101可以用其他數字替代,但是一般要大於100,如果小於100可能和系統函數沖突。
2、在子對話框中添加消息響應函數,這個網上資料很多,這里簡單說一下:
在頭文件中添加:afx_msg LRESULT OnTest(WPARAM wParam,LPARAM lParam);
在cpp文件中添加:ON_MESSAGE(WM_TEST,OnTest)
添加具體函數:
LRESULT CPara2::OnTest(WPARAM wParam,LPARAM lParam)
{ MessageBox( "Hello World" ); }
3、在主對話框你需要響應的地方添加:
::PostMessage(para2.GetSafeHwnd(),WM_TEST,0,0);//para2是子對話框的類名,由於是不同窗口之間,所以獲得句柄用GetSafeHwnd()函數
4、如果想通過PostMessage傳遞參數,可以使用wParam和lParam選項。
這種方法相對復雜,但是應用范圍較廣,可以學習一下。
下面對WPARAM和LPARAM參數之間的區別進行簡單的解釋。
WPARAM 和 LPARAM
wParam和lParam 這兩個是Win16系統遺留下來的產物,在Win16API中WndProc有兩個參數:一個是WORD類型的16位整型變量;另一個是LONG類型的32位整型變量。
因此根據匈牙利命名法,16位的變量就被命名為wParam, 32位的變量就被命名為lParam。
而到了Win32API中,原來的16位變量也被擴展為32位,因此此時wParam和lParam的大小完全相同。
區別及習慣用法:
MS在使用時兩種參數分別代表不同的含義和內容,WPARAM常常代表一些控件的ID或者高位低位組合起來分別表示鼠標的位置,如果消息的發送者需要將某種結構的指針或者是某種類型的句柄時,習慣上用LPARAM來傳遞。除此之外,一般我們使用LPARAM傳遞地址,而WPARAM傳遞其他參數。