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添加 ...
随机推荐
- 获取div或者元素相对于屏幕坐上角的绝对位置
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ip封包
I P封包 從一直以來討論至今﹐我們都不斷地接觸到“封包”這個詞﹐相信您也很有興趣想知道這個“封包”究竟是個什麼樣的東東吧﹗下面就讓我們一起看看一個IP封包究竟包含了那些內容. 擷取IP封包 如果您的 ...
- JFinal - Log 日志
今天偶然发现 JFinal 的 Log 简单小巧.上代码. JFinal 在初始化的时候有初始化 Log. class Config { // ... static void configJFinal ...
- 流媒体测试笔记记录之————阿里云监控、OBS、FFmpeg拉流和推流变化比较记录
OBS设置视频(512kbps)和音频(128kbps)比特率 阿里云监控结果: 使用FFmpeg拉流到Nginx 服务器测试比特率 第二次测试,修改视频和音频比特率 OBS设置 阿里云监控 Ngin ...
- PPP协议
PPP协议PPP协议是二层(数据链路层)协议,常用于拨号上网时客户端向服务器获取IP地址.PPP支持在各种物理类型的点对点串行线路上传输上层协议报文.它具有很多特性,比如支持多协议.提供可选的身份认证 ...
- 移动APP的开发迭代离不开测试,你搞清楚其中的关键点了吗?
App测试的一个要求是一个beta测试环境.为此,操作系统制造商要么提供他们自己的测试环境,比如:Testflight (iOS),要么可以使用任一商用工具,如:HockeyApp (Android) ...
- ROS学习笔记(八)——ROSTOPIC
NEW 1 $ roscore NEW 2 $ rosrun turtlesim turtlesim_node NEW 3 $ rosrun turtlesim turtle_teleop_key N ...
- settings.php rwx
440/400 https://www.drupal.org/node/137702 You must understand the meaning of XYZ chmod from file at ...
- 2017年1月1日 java学习第二天复习
今天是新年的第一天,以前学习没有总结习惯,学习效率和成果都很不好. 学习的过程就是反复的复习和不断学习的过程,开始今天的学习总结 学习java的第二天. 今天学习了java最基础的一些内容,照着 ...
- eclipse中遇到的小问题
1.在启动eclipse的时候,遇到了build path specifies execution enviroment J2SE-1.5.There are noJREs installed.的相关 ...