您的位置:首页 > 其它

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。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vc mfc