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

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;

}

MFC 控件中画矩形相关推荐

  1. MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片

    最近有同学问我如何实现MFC基于对话框在图片控件中加载图片?其实使用MFC显示图片的方法各种各样,但是还是有些同学不知道怎样显示.以前在<数字图像处理>课程中完成的软件都是基于单文档的程序 ...

  2. VS2010中如何实现自定义MFC控件

    本文简要讲解在VS2010中怎样实现自定义MFC控件的知识,以下是分步骤说明. 一.自定义一个空白控件  1.先创建一个MFC工程 NEW Project-->MFC-->MFC Appl ...

  3. 用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转)

    用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转) 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://hcq11.blogbus.com/logs/5 ...

  4. 【MFC】动态加载Picture Control控件中的图片

    [MFC]动态加载Picture Control控件中的图片 前言 方法1:CBrush 方法2:SetBitmap 参考链接 方法3:重写MyPictureControl 前言 在MFC窗体中,我们 ...

  5. 面向过程中模拟出面向对象,用c语言模拟出MFC控件,消息循环,“设计用户界面”

    大家好,今天给大家分享"怎样用c模拟出MFC控件 简单模拟出消息循环,按钮控件",面向过程中模拟出面向对象. 编程思路 首先用绘图库EasyX绘制窗口,窗口中绘制按钮,把按钮对象化 ...

  6. mfc在控件中嵌入多个窗口,点击按钮切换显示不同窗口

    主窗口添加三个按钮与一个picturecontrol控件,切换的多个窗口嵌入到图片控件中 在资源视图中,右键rc资源文件,添加资源,选择Diaglog窗口资源,新建 建立的子窗口,设置窗口属性 Sty ...

  7. MFC控件编程之复选框单选框分组框

    MFC控件编程之复选框单选框分组框 一丶分组框 分组框 英文叫做 GroubBox 添加了分组框主要就是分组.好看.不重点介绍 二丶单选框 英文: Raido Button 单选框需要注意的事项 1. ...

  8. mfc控件位置调整和坐标确定 .

    在mfc工程中控件或者窗口位置的调整是经常遇到的,特别是基于对话框的工程.位置的调整包括坐标.长度和宽度的变化,一般在窗口类的OnSize函数中实现.控件位置的调整涉及的函数有:GetWindowRe ...

  9. 如何在 ActiveX 控件中使用字体

    字体的使用是ActiveX控件制作过程中不可缺少的部分.本文将深入浅出地介绍在ActiveX控件中制作过程中如何使用字体.本文所提及的ActiveX控件制作是指利用VC++6.0的MFC Active ...

最新文章

  1. Java特性-Collection和Map
  2. easyexcel 动态列_easyexcel动态表头列导出SequenceDiagram 阅读源码事半功倍
  3. 系统描述符类型,段描述符类型和段描述符表
  4. 中文宾州树库标记含义
  5. 线程退出时执行函数,处理资源
  6. ea 如何画bce备选架构图_GitHub - wongdean/rime-settings at 941ea079832ff211723bce1ce8e47344e527575e...
  7. 图论算法——无向图的深度优先搜索和广度优先搜索
  8. 线程7种状态的相互转换
  9. 前端跨域问题,以及ajax,jsonp,json的区别
  10. 什么是0day漏洞,1day漏洞和nday漏洞
  11. 干货 | 各大AI研究院共35场NLP算法岗面经奉上
  12. Docker cgroups资源控制
  13. 手把手教你Magisk安装
  14. 详解OpenCV的椭圆绘制函数ellipse()
  15. Ubuntu 升级错误信息:mount: mounting none on /dev failed: no such device的解决办法
  16. tif文件转为shp文件_ArcGIS栅格数据与矢量数据的转换
  17. 超20城急推购房补贴 地方救市力度接近2008年
  18. 什么是链接?(动态链接库和静态链接库的对比)
  19. 当下这个时代,一个没学历智力情商也低的人,他是如何破局的?深度思考后的回答!...
  20. aardio 读取excel数据问题

热门文章

  1. Nginx上传大图片或者大文件失败
  2. Cyber Security 和 Network Security
  3. TI-BASIC 计算器游戏开发之文字、图形、音频教程 II:图形处理
  4. 集团企业邮箱哪个好用?企业邮箱价格多少钱?
  5. 谈谈什么是数据质量管理
  6. redis 注册服务 报错1067
  7. 蔡基姆拉尔森计算公式
  8. 苹果备忘录功能还没用过?iPhone备忘录全功能介绍
  9. 服务稳定性保障手段与规范
  10. youtube python 中文_youtube dl python库文档