MFC 控件中画矩形_genganpeng的博客-程序员秘密_mfc onpaint 画矩形

技术标签: null  MFC  mfc  

画矩形其实无非就是在鼠标移动的时候,不断地画出矩形和擦除已经画的矩形

 

void ModelAcquire::OnMouseMove(UINT nFlags,CPoint point)

{

         //TODO: 在此添加消息处理程序代码和/或调用默认值

         pdc= GetDC();

         pen= new CPen(PS_SOLID, 1, RGB(255, 0, 0)); //创建画笔

         DeleteObject(pdc->SelectObject(pen));//把创建的画笔选进设备描述表

         if(isLButton== TRUE && CursorIsInControl(point, IDC_MODEL_ALL) == TRUE

                   &&isRestButton == TRUE)//按下左键并且在控件区域内

         {

                   HCURSORhCur  = LoadCursor( NULL, IDC_CROSS);

                   ::SetCursor(hCur);

                   DrawRect(pdc, point);

         }

         else{

                   HCURSORhCur  = LoadCursor( NULL, IDC_ARROW) ;

                   ::SetCursor(hCur);

         }

 

         //在display图片控制区域按下了左键

         if(isLButtonInDisplayPicCtl == TRUE && CursorIsInControl(point,IDC_MODEL_DISPLAY) == TRUE) {

                   HCURSORhCur  = LoadCursor( NULL, IDC_CROSS);

                   ::SetCursor(hCur);

                   DrawFixRect(pdc,point);

         }

 

         CDialogEx::OnMouseMove(nFlags,point);

}

 

 

void ModelAcquire::OnLButtonUp(UINT nFlags,CPoint point)

{

         //TODO: 在此添加消息处理程序代码和/或调用默认值

         if(isLButton == TRUE) {

                   isLButton= FALSE;

                   m_oldPoint.x= 0;

                   m_oldPoint.y= 0;

                   isRestButton= FALSE;

                   CBrush*pBrushOld = (CBrush*)pdc->SelectStockObject(NULL_BRUSH);

                   pdc->Rectangle(m_allRect );

                   pdc->SelectObject(pBrushOld);

         }

 

         if(isLButtonInDisplayPicCtl == TRUE && CommonFunc::RectInRect(m_disRect,m_disPicCtlRect) == TRUE) {

                   isLButtonInDisplayPicCtl= FALSE;

                   CBrush*pBrushOld = (CBrush*)pdc->SelectStockObject(NULL_BRUSH);

                   pdc->Rectangle(m_disRect );

                   pdc->SelectObject(pBrushOld);

                   //擦除矩形框

                   Invalidate();//重绘,在OnPaint函数中画出

                   isLButtonUp= TRUE;

         }

 

         CDialogEx::OnLButtonUp(nFlags,point);

}

 

 

void ModelAcquire::OnLButtonDown(UINTnFlags, CPoint point)

{

         //TODO: 在此添加消息处理程序代码和/或调用默认值

         if(CursorIsInControl(point,IDC_MODEL_ALL) == TRUE)//鼠标是否在控件范围之内

         {

                   isLButton= TRUE;

                   m_sPoint= point;

         }

         if(CursorIsInControl(point,IDC_MODEL_DISPLAY) == TRUE)//鼠标是否在控件范围之内

         {

                   isLButtonInDisplayPicCtl= TRUE;

                   if(isLButtonUp == TRUE) {

                            //擦除矩形框

                            GetCursorPos(&point);

                            SetCursorPos(point.x- 5, point.y - 5);

                            m_disRect.SetRectEmpty();

                            Invalidate();

                            isLButtonUp= FALSE;

                   }

         }

         CDialogEx::OnLButtonDown(nFlags,point);

}

 

bool ModelAcquire::CursorIsInControl(CPointpoint, UINT ID )

{

         ClientToScreen(&point);

         CRectrect;

         GetDlgItem(ID)->GetClientRect(rect);

         GetDlgItem(ID)->ClientToScreen(rect);

         if(rect.PtInRect(point))

                   returnTRUE;

         returnFALSE;

}

 

void ModelAcquire::DrawRect(CDC *pdc,CPoint point)

{

         //擦除矩形框

         if(m_oldPoint.x != 0 ) {

                   m_allRect.SetRect(m_sPoint.x,m_sPoint.y, m_oldPoint.x, m_oldPoint.y);  

                   m_allRect.NormalizeRect();  

                   pdc->DrawFocusRect(&m_allRect);

         }

 

         //画矩形框

         m_allRect.SetRect(m_sPoint.x,m_sPoint.y, point.x, point.y);  

         m_allRect.NormalizeRect();  

         pdc->DrawFocusRect(&m_allRect);

 

         m_oldPoint= point;

}

 

void ModelAcquire::DrawFixRect(CDC *pdc,CPoint point)

{

         if(isFirstDrawRect == TRUE) {

                   //擦除矩形框

                   m_disRect.NormalizeRect();  

                   pdc->DrawFocusRect(&m_disRect);

         }

 

         //画矩形框

         m_disRect.SetRect(point.x- FixWidth / 2, point.y - FixHeight / 2, point.x + FixWidth / 2, point.y +FixHeight / 2);

         if(CommonFunc::RectInRect(m_disRect, m_disPicCtlRect) == TRUE) {  

                   m_disRect.NormalizeRect();  

                   pdc->DrawFocusRect(&m_disRect);

                   isFirstDrawRect= TRUE;

         }

         else

                   isFirstDrawRect= FALSE;

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/genganpeng/article/details/7353302

智能推荐

Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found_Huang煌辉的博客-程序员秘密

org.apache.ibatis.exceptions.PersistenceException: ### Error updating database.  Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped State...

PHP笔记——Yii2学习笔记4(视图入门之布局,前端资源)_yii框架 前端资源使用_Myron.Maoyz的博客-程序员秘密

一、视图通过之前的笔记,以及参考:应用结构(Application Structure): 视图(Views) - Yii 2.0 权威指南 - 文档 - Yii Framework 中文网3 Yii2.0灵活使用AppAssets管理CSS样式及JS脚本_眼镜君-程序员秘密应用结构(Application Structure): 前端资源(Assets) - Yii 2.0 权威指南 - 文档 - Yii Framework 中文网...

轻松掌握Windows窗体间的数据交互_weixin_30369087的博客-程序员秘密

作者:郑佐原文地址:http://blog.csdn.net/zhzuo/archive/2004/04/05/22027.aspx日期:2004-04-05Windows 窗体是用于 Microsoft Windows 应用程序开发的、基于 .NET Framework 的新平台。此框架提供一个有条理的、面向对象的、可扩展的类集,它使您得以开发丰富的 Windows 应用程序。一...

82 - 删除排序链表中的重复元素 II - python_Forlogen的博客-程序员秘密

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3这道题和83题相同之处在于,都是给一个排序链表。要求删除链表中重复的元素;不同之处...

Maven项目下java.lang.ClassNotFoundException的解决方法_zym2895857的博客-程序员秘密

转自 http://www.cnblogs.com/prettymdx/p/5951715.html问题背景:Maven的project下,项目中已经引用了相应的jar包。Java class中没有语法错误,在执行时报ClassNotFound。检查了Maven的pom.xml,依赖引入正常。错误原因:进入到tomcat的部署路径C:\eclipseworksp

NYOJ 954 N! (数学)_Strokess的博客-程序员秘密

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=954N!时间限制:1000 ms  |  内存限制:65535 KB难度:3描述阶乘(Factorial)是一个很有意思的函数,但是不少人都比较怕它。现在这里有一个问题,给定一个N(0输入本题有多组测试数据,每组数

随便推点

返回页面顶部模块_iteye_3607的博客-程序员秘密

1.js事件<a class="back-top" href="#top" onclick="window.scrollTo(0,0);return false;" title="返回顶部"style="position:fixed;right:0px;">返回顶部</a>也可采用如下写法<a href="javasc

[/usr/share/doc/pcre-8.32/Makefile] Error 127解决办法_luffy5459的博客-程序员秘密

安装nginx提示需要pcre库,需要通过参数--with-pcre来指定,通过rpm -ql命令查看系统已经安装了pcre,如下图所示:在通过configurer配置nginx选项时,指定pcre目录为/usr/share/doc/pcre-8.32,不会出错,但是make时就出现如题所示错误。这个错误的原因是通过--with-pcre需要指定pcre的源码目录,而不是安装目录,下载pc...

linux没有WideCharToMultiByte,MultiByteToWideChar,换用mbstowcs,wcstombs_NOHACKCC的博客-程序员秘密

1,wcstombssize_t wcstombs (char* dest, const wchar_t* src, size_t max);Convert wide-character string to multibyte stringdestPointer to an array of char elements long enough to contain the res

Secure CRT 本地文件上传至远程服务器_Francis Einscan的博客-程序员秘密

本文将介绍如何使用secure crt 将本地文件上传至虚拟机或远程linux 服务器(即下文所讲的远程端),这仅是本人平常喜欢使用的一种方式。用secure crt 连接、登录虚拟机鼠标右键,并选中Connect SFTP Tab,如图:切换至SFTP 窗口几个常用命令:lpwd :查看本地当前所在目录 pwd :查看远程端所在目录lls :查看本地当前目录下内容 ...

腾讯会员下载本地视频,非会员观看_chongsi1881的博客-程序员秘密

我是腾讯会员,我一个朋友不是。他想看一个会员电影,我在自己电脑上下载了这个电影。是qlv格式,只支持腾讯视频播放。</br>这时候,他要看有两种方式:<br>一是使用格式工厂等转换工具转换为MP4等常见视频格式,再使用任意支持该视频格式的播放器观看。<br&...

BZOJ 3944 - Sum(杜教筛)_3944: sum_歪歪扣的博客-程序员秘密

题目戳这里子问题:    ∑i=1nφ(i)~~~~\sum_{i=1}^{n}\varphi(i)    ∑i=1n​φ(i)因为    ∑i∣nφ(i)=n~~~~\sum_{i|n}\

推荐文章

热门文章

相关标签