用户自定义消息,以及消息传递的参数设定

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

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

 

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

新建对话框工程,命名为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()的使用区别。

 

posted on   jogger  阅读(974)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
< 2012年4月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
6 7 8 9 10 11 12

导航

统计

点击右上角即可分享
微信分享提示