怎样用MFC获取矩形区域?
时间:2011-12-01
来源:互联网
实现如下功能:按下鼠标左键确定第一个矩形对角点位置,按住鼠标并拖动鼠标到另一位置时,释放左键确定另一个对角点。
我实现以上功能的代码如下:
void CMyListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_startRect = TRUE; //鼠标左键单击,设置可以开始绘制矩形框
m_startPoint = point; //记录开始点
m_OldPoint = point; //设置老点也为开始点
CListCtrl::OnLButtonDown(nFlags, point);
}
//拖动鼠标
void CMyListCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
CClientDC dc(this); //获取设备句柄
dc.SetROP2(R2_NOT); //
dc.SelectStockObject(NULL_BRUSH); //不使用画刷
if (TRUE == m_startRect) //根据是否有单击判断是否可以画矩形
{
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
dc.Rectangle(CRect(m_startPoint,point));
m_OldPoint = point;
}
CListCtrl::OnMouseMove(nFlags, point);
}
//释放鼠标左键
void CMyListCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
m_startRect = FALSE; //重置绘制矩形框标志
//消隐最后的一个矩形(其原理跟拖动时矩形框绘制原理相同)
CClientDC dc(this);
dc.SetROP2(R2_NOT);
dc.SelectStockObject(NULL_BRUSH);
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
CListCtrl::OnLButtonUp(nFlags, point);
}
为什么矩形会随着鼠标到处乱画?而不是松开鼠标就完成了一个矩形的绘制?有没有谁有更好的代码,可以获取任意矩形区域?先谢了~
我实现以上功能的代码如下:
void CMyListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_startRect = TRUE; //鼠标左键单击,设置可以开始绘制矩形框
m_startPoint = point; //记录开始点
m_OldPoint = point; //设置老点也为开始点
CListCtrl::OnLButtonDown(nFlags, point);
}
//拖动鼠标
void CMyListCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
CClientDC dc(this); //获取设备句柄
dc.SetROP2(R2_NOT); //
dc.SelectStockObject(NULL_BRUSH); //不使用画刷
if (TRUE == m_startRect) //根据是否有单击判断是否可以画矩形
{
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
dc.Rectangle(CRect(m_startPoint,point));
m_OldPoint = point;
}
CListCtrl::OnMouseMove(nFlags, point);
}
//释放鼠标左键
void CMyListCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
m_startRect = FALSE; //重置绘制矩形框标志
//消隐最后的一个矩形(其原理跟拖动时矩形框绘制原理相同)
CClientDC dc(this);
dc.SetROP2(R2_NOT);
dc.SelectStockObject(NULL_BRUSH);
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
CListCtrl::OnLButtonUp(nFlags, point);
}
为什么矩形会随着鼠标到处乱画?而不是松开鼠标就完成了一个矩形的绘制?有没有谁有更好的代码,可以获取任意矩形区域?先谢了~
作者: yisiyou 发布时间: 2011-12-01
在鼠标点下记录第一点,移动的时候记录第二点,松开时记录在第二点。
mousemove里一直调用invalidate();
在ondraw里画图~
mousemove里一直调用invalidate();
在ondraw里画图~
作者: kobeyoung2 发布时间: 2011-12-01
void CMDViewView::OnLButtonDown(UINT nFlags, CPoint point)
{
point1=point;//获取按下左键时的点
}
void CMDViewView::OnLButtonUp(UINT nFlags, CPoint point)
{
point2=point;//获取按下右键时的点
OnDrawRectange(point1,point2);//自定义函数,绘制矩形
}
其中:
width=point2.x-point1.x;//矩形的宽
height=point2.y-point1.y;//矩形的高
{
point1=point;//获取按下左键时的点
}
void CMDViewView::OnLButtonUp(UINT nFlags, CPoint point)
{
point2=point;//获取按下右键时的点
OnDrawRectange(point1,point2);//自定义函数,绘制矩形
}
其中:
width=point2.x-point1.x;//矩形的宽
height=point2.y-point1.y;//矩形的高
作者: liuli7786 发布时间: 2011-12-01
SetCapture(); ReleaseCapture(); 自己查查这两个函数 在合适的地方添加
作者: dhbfly 发布时间: 2011-12-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28