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传递其他参数。

原文地址:https://www.cnblogs.com/fpqi/p/9520413.html