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()的使用区别。

     

  • 相关阅读:
    mysql in 的另一种替换方法
    js 的一些总结
    医院收费系统 一点的简单总结
    物流系统
    mysqldump备份还原和mysqldump导入导出语句大全详解
    android 环境待建遇到的问题
    EXT CheckboxSelectionModel 多选效果
    Ext Grid动态生成Column的实现方式
    Javascript对象继承(原型继承法)
    ExtJS中grid的JsonStore、Ext.PagingToolbar带条件查询问题
  • 原文地址:https://www.cnblogs.com/jogger/p/2447837.html
Copyright © 2011-2022 走看看