zoukankan      html  css  js  c++  java
  • 用户自定义消息,以及消息传递的参数设定

    有的时候窗口需要收发消息来达到某种效果或目的。而且用户可以自定义消息,并可以携带参数。

    此文浅谈介绍如何自定义消息和参数的设置。

     

    /////////////////////////////////////////////////////////

    新建对话框工程,命名为Dialog

     

    DialogDlg.h类头文件中定义客户消息宏 ,如下

    #define WM_MYOWNMESSAGE WM_USER + 100

     

    DialogDlg.h类中声明消息处理函数如下

    afx_msg void OnOwnMessage(WPARAM wp, LPARAM lp);

     

    DialogDlg.cpp消息映射中关联自定义消息与消息处理函数,如下

    BEGIN_MESSAGE_MAP(CDialogDlg, CDialog)
     //{{AFX_MSG_MAP(CDialogDlg)
      ON_MESSAGE(WM_MYOWNMESSAGE, OnOwnMessage) /* 关联消息映射 */
     //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    DialogDlg.cpp函数功能实现

    void CDialogDlg::OnOwnMessage(WPARAM wp, LPARAM lp)
    {

      // 此处添加处理
    }

    就绪。。。

    剩下的就是在调用处,发送此消息给CDialogDlg。让CDialogDlg做出回应。

     

    /////////////////////////////////////////////////////////

    字符串做参数------

    发送:

    char* szsend = "this is text";

    SendMessage(hwnddlg, WM_MYOWNMESSAGE, (WPARAM)(char*)sztext, 0);

    接受:

    char szreceive[128];

    memcpy(&szreceive, (char*)wp, 128); // 注意处理溢出,此处不详解

    MessageBox(szreceive);

     

    结构体做参数------

    typedef struct _tagINFO{

    char name[128];

    int age;

    }INFO, *LPINFO;

     

    发送:

     INFO info;
     memset(&info, 0, sizeof(INFO));
     info.age = 12;
     strcpy(info.name, "Jack");
     ::SendMessage(hwnddlg, WM_MYOWNMESSAGE, (WPARAM)(LPINFO)&info, 0);

    接收:

     INFO rinfo;
     memcpy(&rinfo, (LPINFO)wp, sizeof(INFO));
     MessageBox(rinfo.name);

    还有需要注意的是

    1 消息参数的生存周期问题。当函数返回时,分配在栈里的空间被回收,参数也会失效。

    2 SendMessage()与PostMessage()的使用区别。

     

  • 相关阅读:
    Zookeeper实现配置中心
    Springboot
    分布式事务框架
    Spring 事件Application Event
    了解“事务机制” 过程
    mysql : 行锁,表锁,共享锁,排他锁,悲观锁,乐观锁
    数据库隔离级别和实现原理
    aop用于日志
    exceptionHandler統一处理异常
    mysql 点总结
  • 原文地址:https://www.cnblogs.com/jogger/p/2447837.html
Copyright © 2011-2022 走看看