今天学了点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之鼠标消息处理的更多相关文章

  1. VC/MFC 当鼠标移到控件上时显示提示信息

    VC/MFC 当鼠标移到控件上时显示提示信息 ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法 ...

  2. opencv与mfc显示图片操作,MFC的鼠标响应在opencv图片上失效,opencv滚轮事件没有响应问题描述解决。

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11588758.html 用mfc 与OPENCV编写成. 出了很多冲突异常事件导致鼠标操作没有 ...

  3. MFC程序的消息处理顺序

    MFC应用程序中处理消息的顺序 1.AfxWndProc()      该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc()  该 ...

  4. MFC下WM_NOTIFY消息处理流程

    参考文章:MFC的消息反射机制 在前一篇文章:MFC消息处理流程概述中描述了MFC消息处理的大体流程.由CWnd::OnWndMsg函数可知,当消息为WM_NOTIFY消息时,调用的是virtual ...

  5. windows鼠标消息处理与键盘模拟函数

    1.鼠标坐标问题 BOOL GetWindowRect(   HWND hWnd,   LPRECT lpRect  ); RECT x;//定义一个二维数组x ::GetWindowRect(hwn ...

  6. mfc设置鼠标状态OnSetCursor响应函数

    参考文章:1.https://bbs.csdn.net/topics/70084486 2.https://blog.csdn.net/wang15061955806/article/details/ ...

  7. MFC添加鼠标相应事件

    Class View (类视图)窗口中选中 你要添加事件的类(比如C***View.CPP),切换到properties窗口. 点击上面的Message图标(在Event图标[一个闪电形状的图标] 右 ...

  8. MFC如何添加系统消息处理函数?

    http://zhidao.baidu.com/question/318026804.html 在MFC程序中,我们并不经常直接调用Windows API,而是从MFC类创建对象并调用属于这些对象的成 ...

  9. MFC控件编程之鼠标跟键盘消息

    MFC控件编程之鼠标跟键盘消息 在MFC中鼠标消息.键盘消息我们很常用.所以说一下. 鼠标消息分为客户区消息.跟非客户区消息. 一丶客户区消息 我们可以处理消息.来进行我们相应的函数即可. MFC添加 ...

随机推荐

  1. Unity仪表盘显示UGUI制作小心得

    最近在做设备仪表参数参数显示,由于模型摆放位置经常修改,加之要求不能在模型的下面添加东西,显示界面的位置也不得不跟着修改,一来二去就烦了,想了解决办法,现在总结如下: 1.仍然在模型下面新建Panel ...

  2. LINUX安全加固规范

    1 概述 近几年来Internet变得更加不安全了.网络的通信量日益加大,越来越多的重要交易正在通过网络完成,与此同时数据被损坏.截取和修改的风险也在增加. 只要有值得偷窃的东西就会有想办法窃取它的人 ...

  3. ECMAScript toString() 方法

    ECMAScript 定义所有对象都有 toString() 方法,无论它是伪对象,还是真对象. ECMAScript 的 Boolean 值.数字和字符串的原始值的有趣之处在于它们是伪对象,这意味着 ...

  4. JavaScript的chapterI

    JavaScript是一种由web浏览器进行解析和执行脚本语言,包括ECMAScript,DOM,BOM. JavaScript的最大作用是赋予页面动作,让页面动起来,已经动态的处理页面的数据. 应用 ...

  5. .NET HttpWebRequest/WebClient网络请求第一次很慢解决方案

    不使用代理: <?xml version="1.0" encoding="utf-8" ?> <configuration> <s ...

  6. python 生成器生成杨辉三角

    用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...

  7. 转!!负载均衡器技术Nginx和F5的优缺点对比

    对于数据流量过大的网络中,往往单一设备无法承担,需要多台设备进行数据分流,而负载均衡器就是用来将数据分流到多台设备的一个转发器. 目前有许多不同的负载均衡技术用以满足不同的应用需求,如软/硬件负载均衡 ...

  8. OnTimer

    OnTimer不是多线程. OnTimer是以SendMessage的方式发送消息到消息队列. sendMessage必须等待对话框响应完消息后才返回.

  9. Java之工厂方法

    普通工厂模式: 第一步:定义接口,坚持面向接口编程, package dp; public interface Sender {    public void send();} 第二步:实现接口: p ...

  10. web.xml中的contextConfigLocation在spring中的作用

    在web.xml中通过contextConfigLocation配置spring, contextConfigLocation参数定义了要装入的 Spring 配置文件.默认会去/WEB-INF/下加 ...