CRectTracker类可以方便的实现这些功能
CRectTracker是一个很有用的类,可以通过调用CRectTracker::TrackRubberBand 响应WM_LBUTTONDOWN消息来创建一个橡皮区矩形。
相应三个消息:鼠标按下,移动,松开
resize函数c++按下的时候得到矩形的一个点
移动过程中鼠标的位置作为对角线上的点,画矩形
松开时鼠标位置为最终的点
resize函数c++按下的时候得到矩形的一个点
移动过程中鼠标的位置作为对角线上的点,画矩形
松开时鼠标位置为最终的点
在鼠标移动过程中不断的得到最近的一个矩形
但是以前画的矩形不知道应该怎么样擦除?
代码如下,只有鼠标移动部分:
CRebarDoc* pDoc = GetDocument();
CClientDC dc(this);
但是以前画的矩形不知道应该怎么样擦除?
代码如下,只有鼠标移动部分:
CRebarDoc* pDoc = GetDocument();
CClientDC dc(this);
pDoc-> PEnd = point;
dc-> Rectangle(pDoc-> PStart.x, pDoc-> PStart.y, pDoc-> PEnd.x, pDoc-> PEnd.y);
CView::OnMouseMove(nFlags, point);
dc-> Rectangle(pDoc-> PStart.x, pDoc-> PStart.y, pDoc-> PEnd.x, pDoc-> PEnd.y);
CView::OnMouseMove(nFlags, point);
回答1:
添加如下部分
CClientDC dc(this);
int nOp = dc.SetRop2(R2_NOT);
dc-> Rectangle(pDoc-> PStart.x, pDoc-> PStart.y, pDoc-> PEnd.x, pDoc-> PEnd.y);
pDoc-> PEnd = point;
dc-> Rectangle(pDoc-> PStart.x, pDoc-> PStart.y, pDoc-> PEnd.x, pDoc-> PEnd.y);
dc.SetRop2(nOp);
CClientDC dc(this);
int nOp = dc.SetRop2(R2_NOT);
dc-> Rectangle(pDoc-> PStart.x, pDoc-> PStart.y, pDoc-> PEnd.x, pDoc-> PEnd.y);
pDoc-> PEnd = point;
dc-> Rectangle(pDoc-> PStart.x, pDoc-> PStart.y, pDoc-> PEnd.x, pDoc-> PEnd.y);
dc.SetRop2(nOp);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论