VC中自定义消息响应函数
2014-03-08 21:01
253 查看
这是从新对windows的自定义消息响应函数进行整理。因为我发现自定义消息响应函数还是非常有用的,尤其是在windows多编程中,用的类越多,有时候就比较有用。
Windows消息用"WM_"这个前缀,自定义的消息一般用"UM_这个前缀"。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1.建立响应函数的原型:
在VS2005中,对于响应函数有了个比较严格的规定,导致以前VC6里面有很多不能直接使用,原型如下:
Cpp代码
afx_msg LRESULT (CWnd::)MyFnx(WPARAM wParam,LPARAM lParam)
对于返回类型与参数都不能少。将响应函数添加在头文件当中:
Cpp代码
......
// 生成的消息映射函数
protected:
......
afx_msg LRESULT MyFnx(WPARAM wParam, LPARAM lParam);
......
DECLARE_MESSAGE_MAP()
......
2.定义消息:
在类的头文件中添加一个自定义的消息:
Cpp代码
#define UM_MYMSG WM_USER+1
这样UM_MYMSG就是对应的消息。
3.将消息映射到响应函数:
在类的源文件中添加映射关系:
Cpp代码
.......
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
......
ON_MESSAGE(UM_MYMSG,MyFnx)
......
END_MESSAGE_MAP()
......
4.响应函数的具体实现:
在源文件中添加上成员函数MyFnx的具体实现:
Cpp代码
LRESULT CWnd::MyFnx(WPARAM wParam, LPARAM lParam)
{
......
}
5.在需要使用到该函数的地方发出消息
Cpp代码
PostMessage(MY_MSG,wParam,lParam);
//将消息加入等待队列,不会马上执行
//SendMessage(MY_MSG,wParam,lParam)则不同,会马上执行
////////////////////////////////////////////////////////////
下面我们举一个实际的例子来说明该段过程.例如在对话框中设置一个按钮,每隔3秒钟会自动的弹出Message对话框:
(1)首先在头文件或CPP文件中定义一个消息
(2)然后在消息映射宏里面添加函数声明:
我们一般将自定义的消息卸载AFX_MSG的外面
(3)在CPP文件里面将消息和消息响应函数链接:
(4)定义响应函数
(5)发送消息:
需要注意的是,PostMessage函数后面带有参数,可以向响应函数里面传参,例如上面的例子中,我们在(5)的消息函数中有一个int num,其实就是postMessage函数传过来的参数1。
Windows消息用"WM_"这个前缀,自定义的消息一般用"UM_这个前缀"。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1.建立响应函数的原型:
在VS2005中,对于响应函数有了个比较严格的规定,导致以前VC6里面有很多不能直接使用,原型如下:
Cpp代码
afx_msg LRESULT (CWnd::)MyFnx(WPARAM wParam,LPARAM lParam)
对于返回类型与参数都不能少。将响应函数添加在头文件当中:
Cpp代码
......
// 生成的消息映射函数
protected:
......
afx_msg LRESULT MyFnx(WPARAM wParam, LPARAM lParam);
......
DECLARE_MESSAGE_MAP()
......
2.定义消息:
在类的头文件中添加一个自定义的消息:
Cpp代码
#define UM_MYMSG WM_USER+1
这样UM_MYMSG就是对应的消息。
3.将消息映射到响应函数:
在类的源文件中添加映射关系:
Cpp代码
.......
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
......
ON_MESSAGE(UM_MYMSG,MyFnx)
......
END_MESSAGE_MAP()
......
4.响应函数的具体实现:
在源文件中添加上成员函数MyFnx的具体实现:
Cpp代码
LRESULT CWnd::MyFnx(WPARAM wParam, LPARAM lParam)
{
......
}
5.在需要使用到该函数的地方发出消息
Cpp代码
PostMessage(MY_MSG,wParam,lParam);
//将消息加入等待队列,不会马上执行
//SendMessage(MY_MSG,wParam,lParam)则不同,会马上执行
////////////////////////////////////////////////////////////
下面我们举一个实际的例子来说明该段过程.例如在对话框中设置一个按钮,每隔3秒钟会自动的弹出Message对话框:
(1)首先在头文件或CPP文件中定义一个消息
(3)在CPP文件里面将消息和消息响应函数链接:
相关文章推荐
- erlang 随笔
- 23种设计模式UML图and简例
- 《痕迹识人,面试读心》培训总结之二
- ARCH UEFI 想说爱你不容易
- Spine使用(With Cocos2d-x)
- [windows phone] 教你如何使地图动画缩放
- javascript 注释
- JVM调优分享-(概要+例子)
- Python Supervisord 进程管理工具
- C# Windows Phone 8 WP8,切换各国语系免重开机 加速开发 送审有效率!!
- DNS服务器之子域授权和split view分离解析
- 数字图像处理(笔记1)
- 中文版 OPC UA 规范 1
- 使用Maven构建RichFaces 4.x项目
- U-Boot第一阶段关键代码理解
- [DP]NOIP2013 PJ 小盆友的数字
- 2011蓝桥杯【初赛试题】程序设计题三
- 从底向上层次遍历二叉树
- [Windows Phone]解锁、注册Windows Phone实体手机为开发机(Windows 8)
- 解决VS2012新建MVC3等项目时,收到加载程序集“NuGet.VisualStudio.Interop…”的错误