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;
}
MFC 控件中画矩形相关推荐
- MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片
最近有同学问我如何实现MFC基于对话框在图片控件中加载图片?其实使用MFC显示图片的方法各种各样,但是还是有些同学不知道怎样显示.以前在<数字图像处理>课程中完成的软件都是基于单文档的程序 ...
- VS2010中如何实现自定义MFC控件
本文简要讲解在VS2010中怎样实现自定义MFC控件的知识,以下是分步骤说明. 一.自定义一个空白控件 1.先创建一个MFC工程 NEW Project-->MFC-->MFC Appl ...
- 用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转)
用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转) 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://hcq11.blogbus.com/logs/5 ...
- 【MFC】动态加载Picture Control控件中的图片
[MFC]动态加载Picture Control控件中的图片 前言 方法1:CBrush 方法2:SetBitmap 参考链接 方法3:重写MyPictureControl 前言 在MFC窗体中,我们 ...
- 面向过程中模拟出面向对象,用c语言模拟出MFC控件,消息循环,“设计用户界面”
大家好,今天给大家分享"怎样用c模拟出MFC控件 简单模拟出消息循环,按钮控件",面向过程中模拟出面向对象. 编程思路 首先用绘图库EasyX绘制窗口,窗口中绘制按钮,把按钮对象化 ...
- mfc在控件中嵌入多个窗口,点击按钮切换显示不同窗口
主窗口添加三个按钮与一个picturecontrol控件,切换的多个窗口嵌入到图片控件中 在资源视图中,右键rc资源文件,添加资源,选择Diaglog窗口资源,新建 建立的子窗口,设置窗口属性 Sty ...
- MFC控件编程之复选框单选框分组框
MFC控件编程之复选框单选框分组框 一丶分组框 分组框 英文叫做 GroubBox 添加了分组框主要就是分组.好看.不重点介绍 二丶单选框 英文: Raido Button 单选框需要注意的事项 1. ...
- mfc控件位置调整和坐标确定 .
在mfc工程中控件或者窗口位置的调整是经常遇到的,特别是基于对话框的工程.位置的调整包括坐标.长度和宽度的变化,一般在窗口类的OnSize函数中实现.控件位置的调整涉及的函数有:GetWindowRe ...
- 如何在 ActiveX 控件中使用字体
字体的使用是ActiveX控件制作过程中不可缺少的部分.本文将深入浅出地介绍在ActiveX控件中制作过程中如何使用字体.本文所提及的ActiveX控件制作是指利用VC++6.0的MFC Active ...
最新文章
- Java特性-Collection和Map
- easyexcel 动态列_easyexcel动态表头列导出SequenceDiagram 阅读源码事半功倍
- 系统描述符类型,段描述符类型和段描述符表
- 中文宾州树库标记含义
- 线程退出时执行函数,处理资源
- ea 如何画bce备选架构图_GitHub - wongdean/rime-settings at 941ea079832ff211723bce1ce8e47344e527575e...
- 图论算法——无向图的深度优先搜索和广度优先搜索
- 线程7种状态的相互转换
- 前端跨域问题,以及ajax,jsonp,json的区别
- 什么是0day漏洞,1day漏洞和nday漏洞
- 干货 | 各大AI研究院共35场NLP算法岗面经奉上
- Docker cgroups资源控制
- 手把手教你Magisk安装
- 详解OpenCV的椭圆绘制函数ellipse()
- Ubuntu 升级错误信息:mount: mounting none on /dev failed: no such device的解决办法
- tif文件转为shp文件_ArcGIS栅格数据与矢量数据的转换
- 超20城急推购房补贴 地方救市力度接近2008年
- 什么是链接?(动态链接库和静态链接库的对比)
- 当下这个时代,一个没学历智力情商也低的人,他是如何破局的?深度思考后的回答!...
- aardio 读取excel数据问题