VC中自定义消息响应函数
来源:互联网 发布:邝盛 知乎 编辑:程序博客网 时间:2024/05/17 06:25
VC中自定义消息响应函数
这是从新对windows的自定义消息响应函数进行整理。因为我发现自定义消息响应函数还是非常有用的,尤其是在windows多编程中,用的类越多,有时候就比较有用。
Windows消息用"WM_"这个前缀,自定义的消息一般用"UM_这个前缀"。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1.建立响应函数的原型:
在VS2005中,对于响应函数有了个比较严格的规定,导致以前VC6里面有很多不能直接使用,原型如下:
- afx_msg LRESULT (CWnd::)MyFnx(WPARAM wParam,LPARAM lParam)
对于返回类型与参数都不能少。将响应函数添加在头文件当中:
- ......
- // 生成的消息映射函数
- protected:
- ......
- afx_msg LRESULT MyFnx(WPARAM wParam, LPARAM lParam);
- ......
- DECLARE_MESSAGE_MAP()
- ......
2.定义消息:
在类的头文件中添加一个自定义的消息:
- #define UM_MYMSG WM_USER+1
这样UM_MYMSG就是对应的消息。
3.将消息映射到响应函数:
在类的源文件中添加映射关系:
- .......
- BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
- ......
- ON_MESSAGE(UM_MYMSG,MyFnx)
- ......
- END_MESSAGE_MAP()
- ......
4.响应函数的具体实现:
在源文件中添加上成员函数MyFnx的具体实现:
- LRESULT CWnd::MyFnx(WPARAM wParam, LPARAM lParam)
- {
- ......
- }
5.在需要使用到该函数的地方发出消息
- PostMessage(MY_MSG,wParam,lParam);
- //将消息加入等待队列,不会马上执行
- //SendMessage(MY_MSG,wParam,lParam)则不同,会马上执行
////////////////////////////////////////////////////////////
下面我们举一个实际的例子来说明该段过程.例如在对话框中设置一个按钮,每隔3秒钟会自动的弹出Message对话框:
(1)首先在头文件或CPP文件中定义一个消息
#define CLICK_MESSAGE_BOX WM_USER+100
(2)然后在消息映射宏里面添加函数声明:
//{{AFX_MSG(CMy41Dlg)
virtual
BOOL OnInitDialog();
afx_msg
void
OnSysCommand(UINT nID, LPARAM lParam);
afx_msg
void
OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg
void
OnButton1();
afx_msg
void
OnTimer(UINT nIDEvent);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
afx_msg
void
OnResponse(
int
num);
我们一般将自定义的消息卸载AFX_MSG的外面
(3)在CPP文件里面将消息和消息响应函数链接:
BEGIN_MESSAGE_MAP(CMy41Dlg, CDialog)
//{{AFX_MSG_MAP(CMy41Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_WM_TIMER()
ON_MESSAGE (CLICK_MESSAGE_BOX,OnResponse)
//
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
(4)定义响应函数
void
CMy41Dlg::OnResponse(
int
num)
{
CString str;
str.Format(
"%d"
,num);
MessageBox(str+
"自定义的消息响应函数"
);
}
(5)发送消息:
PostMessage(CLICK_MESSAGE_BOX,1);
需要注意的是,PostMessage函数后面带有参数,可以向响应函数里面传参,例如上面的例子中,我们在(5)的消息函数中有一个int num,其实就是postMessage函数传过来的参数1。
- VC中自定义消息响应函数
- VC中自定义消息响应函数
- VC 中添加消息响应函数
- VC中添加WM_USER的消息响应函数
- VC自定义消息postmessage用法(消息响应函数)
- MFC中添加自定义消息响应函数
- VS2008中MFC自定义消息响应函数
- 自定义消息响应函数
- 自定义消息响应函数
- 自定义消息响应函数
- MFC中用户自定义消息的消息响应函数原型
- VC++ 添加自定义消息响应函数以及发送消息SendMessage投递消息PostMessage的简单测试
- MFC中用户自定义消息及其响应函数的方法
- VC中自定义消息
- VC++中自定义消息四步走完
- VC中自定义消息实现
- VC中自定义消息实现
- VC中自定义消息实现
- hdu 1874 畅通工程续
- 传输表空间简介
- 推荐一款国人开发的 MVC快速开发框架 Bee Framework
- [APUE]第六章 系统数据文件和信息
- 写在前面的话
- VC中自定义消息响应函数
- Android: NDK编程入门笔记
- Linux 技巧:让进程在后台可靠运行的几种方法
- win7下ICS共享报错:internet连接共享访问被启用时,出现了一个错误(null)
- [APUE]第七章 进程环境
- hdu 1690 Bus System
- 11G RAC重建ASM实例的SPFILE
- SOCKET 攻击
- POJ 2135 费用流基础