+ -
当前位置:首页 → 问答吧 → 怎样用MFC获取矩形区域?

怎样用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);
}

为什么矩形会随着鼠标到处乱画?而不是松开鼠标就完成了一个矩形的绘制?有没有谁有更好的代码,可以获取任意矩形区域?先谢了~

作者: yisiyou   发布时间: 2011-12-01

在鼠标点下记录第一点,移动的时候记录第二点,松开时记录在第二点。

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;//矩形的高

作者: liuli7786   发布时间: 2011-12-01

SetCapture(); ReleaseCapture(); 自己查查这两个函数 在合适的地方添加

作者: dhbfly   发布时间: 2011-12-01