VC中自定义消息的使用
2015-12-31 15:50
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文件里面将消息和消息响应函数链接:
相关文章推荐
- VC中CDC、HDC、pDC区别与联系及相互转换
- Visual C++中MFC消息的分类
- VC实现获取当前正在运行的进程
- vc中SendMessage自定义消息函数用法实例
- VC实现让关闭按钮成灰色不可用的方法
- VC++中的字体设置方法详解
- VC程序设计中CreateProcess用法注意事项
- VC实现批量删除指定文件的方法
- MFC中Radio Button的用法详解
- MFC对话框中添加状态栏的方法
- MFC创建右键弹出菜单的方法
- MFC中动态创建控件以及事件响应实现方法
- C++ 关于MFC多线程编程的注意事项
- vc中使用SendMessage自定义消息函数
- MFC程序对文件的处理方法
- vc提示unexpected end of file found的原因分析
- MFC自定义消息的实现方法
- vc获取计算机名和ip地址的方法
- MFC实现在文件尾追加数据的方法
- VC6.0实现读取Excel数据的方法