MFC用户自定义消息的使用

场景描述:MFC对话框程序中的picture控件中显示动态图像,并通过鼠标点击获取图像中任意像素的坐标。

首先创建自定义类,通过派生Cwnd类实现在picture控件中绘图从而显示图像,在该类中定义一个鼠标单击事件,其返回的是点击位置相对图像原点的坐标,而非整个对话框的原点。然后希望在对话框中响应该鼠标点击事件,但因为是窗口派生类内部的消息导致不能响应。

重载PreTranslateMessage函数无法解决该问题,最后通过自定义消息得到解决。思路很简单,建立一个自定义消息,在派生类的鼠标单击事件内部发送该消息,在对话框建立消息响应函数,从而实现事件触发。


添加自定义消息的步骤如下,假设A为发送方,B为接受方:

1、首先在A的头文件中定义这个消息:  


  #define WM_USERMESSAGE WM_USER+30


WM_USERMESSAGE可以改为自己的名字,所有自定义消息都是以WM_USER消息为基础加上一个任意的自然数来表示的


2、在A中需要B响应的事件处理函数中,发送消息:


GetParent()->SendMessage(WM_USERMESSAGE,a,b);


a和b的类型分别是wParam和lParam,均为32位整型变量。对其的详细分析http://zhidao.baidu.com/link?url=HF9XA-THqrx-_xaq9dCywbynkgw_8KYSv2Kj2nh4l_IZV0SfrG34KKrI32mzyCo1TvieJklfhjJ5OQ5LsSwXNq


3、在B的头文件中定义同一个消息:


#define WM_USERMESSAGE WM_USER+30


4、为B添加消息处理函数:


afx_msg LRESULT OnProcName( WPARAM wParam, LPARAM lParam );


OnProcName可以使用自己的名字


5、在实现文件中加上接受消息映射的宏  

在cpp文件里,BEGIN_MESSAGE_MAP语句之后,在一对AFX_MSG_MAP之间,增加 如下形式的代码: 


  ON_MESSAGE(WM_USERMESSAGE, OnProcName)  


上面是不用分号结尾的。WM_USERMESSAGE对应自定义消息名,OnProcName是消息处理函数


6、编写消息处理函数


响应该消息后要做的事情






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值