PostMessage實現多窗口之間的數據傳遞


【本文參考自網絡,參考地址: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傳遞其他參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM