博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在MFC中添加用户自定义消息
阅读量:4303 次
发布时间:2019-05-27

本文共 1179 字,大约阅读时间需要 3 分钟。

消息机制是windows的典型运行机制,在MFC中有很多的消息如WM_BTN**等。但是在有些情况下我们需要自定义一些消息去做一些我们需要的功能,MFC的向导不能帮助我们做到这一点,我们可以通过添加相应的代码去完成这个功能。

添加自定义消息操作如下:
1. 建立MFC工程,如基于对话框的应用程序,Test。
2. 在资源中添加要处理的消息的值,即在CTestDlg.h中添加 如下代码。 (因为很多MFC的消息是在WM_USER内的,所以这里用比WM_USER大的消息)

#define WM_MyMessage (WM_USER+100)

3. 声明消息处理函数,在CTestDlg.h中添加代码

class CTestDlg : public CDialog
protected:
……
// 生成的消息映射函数
……
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); // add lyw
DECLARE_MESSAGE_MAP()
……

4. 添加消息映射处理,在CTestDlg.cpp中人找到如下部分添加代码

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
……
ON_MESSAGE(WM_MyMessage, OnMyMessage)
END_MESSAGE_MAP()

5. 实现自己的自定义消息处理

LRESULT CTestDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
//MessageBox("recv msg success");
//添加自己的消息处理
……
return 0; 
}

6. 如果要发送一个自定义的消息,使用代码

SendMessage( WM_MyMessage, 0, 0);

或者

PostMessage(WM_MyMessage, 0, 0);

如果要定义系统唯一的消息让多个应用程序去处理,不同之处如下

1. 把上面2步骤中的宏 #define WM_MyMessage (WM_USER+100) 使用 如下代替

static UINT WM_MyMessage = RegisterWindowMessage("myMessage");

2. 上面4步骤中的代码用如下代替

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
……
ON_REGISTERED_MESSAGE(WM_MyMessage, OnMyMessage)
END_MESSAGE_MAP()

3.测试消息时,如果要让多个应用程序都接收到这个消息,使用

::SendMessage(HWND_BROADCAST, WM_MyMessage, 0, 0);

转载地址:http://dsmws.baihongyu.com/

你可能感兴趣的文章
SpringMvc-ResponseBodyAdvice接口与@ControllerAdvice注解
查看>>
Java的匿名内部类
查看>>
浅谈异常与恋爱
查看>>
java中的反射总结
查看>>
java中的泛型总结
查看>>
java中的正则操作总结
查看>>
java中的IO操作总结(一)
查看>>
java中的IO操作总结(二)
查看>>
java中的IO操作总结(三)
查看>>
java中的IO操作总结(四)
查看>>
Java 内部类种类及使用解析
查看>>
匿名内部类精讲
查看>>
如何在ubuntu下设置永久的alias别名
查看>>
Apache与Nginx的优缺点比较
查看>>
3种PHP连接MYSQL数据库的常用方法
查看>>
linux命令(6) zip/unzip及tar压缩与解压文件命令笔记
查看>>
linux命令(7)ubuntu的vim命令用法
查看>>
使用nginx配置多个php-fastcgi负载均衡
查看>>
CURL抓取网页内容并用正则提取。
查看>>
Ngin的配置文件nginx.conf完整配置说明(包括fastcgi和负载均衡设置)
查看>>