MFC之鼠标消息处理
今天学了点MFC的鼠标处理。用鼠标处理编写了一个小程序。在文本窗口内,绘制鼠标移动轨迹,当按下CTRL键时鼠标将变成十字,并且填充为蓝色的矩形。
第一步:建立单文的MFC程序,添加类CMouseDemoview。然后添加函数WM_LBUTTONDOWN,WM_LBUTTONUP,WM_MOUSEMOVE.系统自动为其生成消息映射宏,和
消息映射函数。
第二步:在CMouseDemoview的头文件中添加变量如下
public:
CMouseDemoDoc* GetDocument();
CPoint startpoint; //起始点
RECT rcOldClip; //原先的鼠标活动区域
第三步:添加实现代码如下
void CMouseDemoView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
GetClipCursor(&rcOldClip); //获取原鼠标活动的有效区域
startpoint=point;//鼠标所在点为起始点
SetCapture();//进行鼠标捕捉
CView::OnLButtonDown(nFlags, point);
} void CMouseDemoView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this); //获得DC
HCURSOR cusor; //鼠标光标句柄
RECT rcClip; //限制矩形区域
if((nFlags&MK_LBUTTON) == MK_LBUTTON)//移动鼠标时鼠标左键是按下的
{
GetWindowRect(&rcClip); //获取客户区窗口区域
ClipCursor(&rcClip);//将鼠标的移动限制的客户区
if((nFlags&MK_CONTROL) != MK_CONTROL)//Ctrl键没有按下
{
cusor=AfxGetApp()->LoadStandardCursor(IDC_CROSS); //载入标准十字光标
SetCursor(cusor); //使用新光标
dc.MoveTo(startpoint.x,startpoint.y);//开始画线
dc.LineTo(point.x,point.y);
startpoint=point;
}
else
{
cusor=AfxGetApp()->LoadStandardCursor(IDC_SIZENS); //载入标准箭头光标
SetCursor(cusor); //使用光标
CBrush mybrush(RGB(,,)); //生成刷子
CBrush *oldbrush; //生成刷子指针
oldbrush=dc.SelectObject(&mybrush); //把刷子选入设备环境
dc. Rectangle(startpoint.x,startpoint.y,point.x,point.y);
dc.SelectObject(oldbrush); //恢复原有刷子
}
}
CView::OnMouseMove(nFlags, point);
} void CMouseDemoView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
ClipCursor(&rcOldClip);//恢复原来的鼠标活动区域
ReleaseCapture();//释放鼠标捕捉
CView::OnLButtonUp(nFlags, point);
} BOOL CMouseDemoView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default return CView::OnSetCursor(pWnd, nHitTest, message);
}
这样就完成了。
MFC之鼠标消息处理的更多相关文章
- VC/MFC 当鼠标移到控件上时显示提示信息
VC/MFC 当鼠标移到控件上时显示提示信息 ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法 ...
- opencv与mfc显示图片操作,MFC的鼠标响应在opencv图片上失效,opencv滚轮事件没有响应问题描述解决。
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11588758.html 用mfc 与OPENCV编写成. 出了很多冲突异常事件导致鼠标操作没有 ...
- MFC程序的消息处理顺序
MFC应用程序中处理消息的顺序 1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc() 该 ...
- MFC下WM_NOTIFY消息处理流程
参考文章:MFC的消息反射机制 在前一篇文章:MFC消息处理流程概述中描述了MFC消息处理的大体流程.由CWnd::OnWndMsg函数可知,当消息为WM_NOTIFY消息时,调用的是virtual ...
- windows鼠标消息处理与键盘模拟函数
1.鼠标坐标问题 BOOL GetWindowRect( HWND hWnd, LPRECT lpRect ); RECT x;//定义一个二维数组x ::GetWindowRect(hwn ...
- mfc设置鼠标状态OnSetCursor响应函数
参考文章:1.https://bbs.csdn.net/topics/70084486 2.https://blog.csdn.net/wang15061955806/article/details/ ...
- MFC添加鼠标相应事件
Class View (类视图)窗口中选中 你要添加事件的类(比如C***View.CPP),切换到properties窗口. 点击上面的Message图标(在Event图标[一个闪电形状的图标] 右 ...
- MFC如何添加系统消息处理函数?
http://zhidao.baidu.com/question/318026804.html 在MFC程序中,我们并不经常直接调用Windows API,而是从MFC类创建对象并调用属于这些对象的成 ...
- MFC控件编程之鼠标跟键盘消息
MFC控件编程之鼠标跟键盘消息 在MFC中鼠标消息.键盘消息我们很常用.所以说一下. 鼠标消息分为客户区消息.跟非客户区消息. 一丶客户区消息 我们可以处理消息.来进行我们相应的函数即可. MFC添加 ...
随机推荐
- java里面interface,implement和extends的作用和用法
今天阅读<设计模式示例>,看到一段代码涉及到了interface,implements和extends,其实在C++中经常用到.今天特百度,比较了一下: interface是一个接口,类似 ...
- Mysql Specified key was too long; max key length is 767 bytes
今天导入一个数据库时,看到以下报错信息: Specified key was too bytes 直译就是索引键太长,最大为767字节. 查看sql库表文件,发现有一列定义如下: 列 名:cont ...
- JavaScript继承
最佳的继承范式 寄生组合继承 我们来看一下它的实现方式: function Object(o){ var TempObject = function(){}; TempObject.prototype ...
- Usage: AddDimensionedImage imageFile outputFile eclipse 运行程序出错
关于这个在eclipse中运行java程序的错,首先确认你的jdk,jre是否完整,并且与你的eclipse的位数相同,当然我相信这个错误大家应该都会去检查到. 第二个关于addDimensioned ...
- RabbitMQ 开启WEB管理
rabbitmq-plugins 插件管理器 1.开启rabbitmq management - WEB管理插件 # rabbitmq-plugins enable rabbitmq_manage ...
- 从C++到GO
从C++到GO 刚开始接触Go语言,看了两本Go语言的书,从c++开发者的角度来看看go语言的新特性,说下自己感触较深的几点: 并发编程 Go语言层面支持协程,将并发业务逻辑从异步转为同步,大幅提高开 ...
- 新一代Ajax API --fetch
之前 师傅跟我提过 一个新的Ajax API fetch 今天看到一篇关于fetch的文章,受益匪浅. XMLHttpRequest并不是专为Ajax而设计的,虽然各种框架对XHR的封装已经足够好用 ...
- Hook机制里登场的角色
稍有接触过 WordPress 主题或插件制作修改的朋友,对 WordPress 的Hook机制应该不陌生,但通常刚接触WordPress Hook 的新手,对其运作原理可能会有点混乱或模糊.本文针对 ...
- c语言练习
#include<stdio.h> struct student{ ]; int No; ]; int sum; }; int strcmp(char *s, char *t) { int ...
- PPTP协议
PPTP协议 PPTP(Point-to-Point Tunneling Protocol)点对点隧道协议是PPP协议的一种扩展,它将PPP帧封装进IP包中,通过IP网络进行传输.它通过PPTP控制连 ...