zoukankan      html  css  js  c++  java
  • 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传递其他参数。

  • 相关阅读:
    SICP 1.9-1.10
    SICP 1.6-1.8
    SICP 1.1-1.5
    【最小生成树】Codeforces 707B Bakery
    【数学】Codeforces 707C Pythagorean Triples
    【离线】【深搜】【树】Codeforces 707D Persistent Bookcase
    【贪心】Vijos P1615 旅行
    【字符串】【最小表示法】Vijos P1683 有根树的同构问题
    【模拟】Vijos P1005 超长数字串
    【并查集】【模拟】Codeforces 698B & 699D Fix a Tree
  • 原文地址:https://www.cnblogs.com/fpqi/p/9520413.html
Copyright © 2011-2022 走看看