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

     

  • 相关阅读:
    python函数、递归、内置函数
    python集合及内置方法
    python数据类型:tuple、dict及其方法
    python数据类型:list及其方法
    python数据类型:int、str及其方法
    python基础
    .net core HttpClient使用
    jmeter 使用
    jmeter安装
    处理IIS 255错误,和相关信息
  • 原文地址:https://www.cnblogs.com/jogger/p/2447837.html
Copyright © 2011-2022 走看看