本文将详细介绍在MFC工程中如何添加消息响应函数。如果大家对如何在MFC中创建C++类感兴趣,可以查看博客在MFC中创建c++类
目录
step1:创建一个事件
step2:配置相关消息
step3:编辑消息处理程序代码
step4:运行示例
对于一些图像,我们并不希望代码一运行就直接全部显示,而是希望通过自己的鼠标进行单击或者一些其他的操作才显示,这就需要我们为MFC程序添加对应某个事件的消息响应函数(也称为回调函数)。
比如我们希望在用鼠标左键点击界面的时候才开始画图,其事件就是LButtonDown。
step1:创建一个事件
点击菜单栏里的【项目】->类向导(注意与添加类不同)
step2:配置相关消息
step3:编辑消息处理程序代码
点击完【编辑代码(E)】后会跳转到下面这个函数,这样就创建成功了
注意!OnLButtonDblClk的参数没有绘图用的CDC* pDC,所以需要自己获取‘画笔’
CClientDC dc(this);
CDC* pDC = &dc;
使用 CClientDC 对象 dc 构造了一个句柄,其中的 this 表示当前窗口的对象指针,即表示当前视图。CClientDC 是一个封装了 Windows GDI 库定义的 HDC 句柄的 MFC 类,它的作用是提供从客户区域开始绘制的设备上下文。创建一个 CClientDC 对象时,会自动获取窗口设备上下文的句柄,并在对象的内部管理该句柄,当对象过期(析构)时,该句柄也随之释放。
然后,将 CClientDC 对象的地址赋值给指针变量 pDC。这里使用指针的目的是为了在调用类成员函数时不必使用实例化对象(如直接使用 dc.FillSolidRect() 可以改为使用 pDC->FillSolidRect() )。也就是说,将设备上下文的地址存储到一个指针变量 pDC 中,是因为一些函数需要传递指向设备上下文的指针。
接下来,我们就可以使用设备上下文 pDC 执行各种 GDI 操作,例如绘制图形、填充颜色、绘制文本等等。
step4:运行示例
一个简单的左键双击后在双击位置显示图像的示例
void Clhn7771View::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
Cbmp* pBMP = new Cbmp();
//要绘制的图像文件名
char bmpName[] = "draw.bmp";
//左上角坐标
int offset_left = point.x;
int offset_top = point.y;
//读取并绘制图像
CClientDC dc(this);
CDC* pDC = &dc;
pBMP->readAndDrawBMP_seperate(pDC, bmpName, offset_left, offset_top);
CView::OnLButtonDblClk(nFlags, point);
}
运行后执行框是空白的
双击后会显示图片(具体效果与自己编写的代码有关)
写在最后:
创建一个消息响应函数需要更改的文件不要搞错了哦o(* ̄▽ ̄*)ブ