CRectTracker类可以方便的实现这些功能
CRectTracker是一个很有用的类,可以通过调用CRectTracker::TrackRubberBand  响应WM_LBUTTONDOWN消息来创建一个橡皮区矩形。
相应三个消息:鼠标按下,移动,松开
resize函数c++按下的时候得到矩形的一个点
移动过程中鼠标的位置作为对角线上的点,画矩形
松开时鼠标位置为最终的点
在鼠标移动过程中不断的得到最近的一个矩形

但是以前画的矩形不知道应该怎么样擦除?

代码如下,只有鼠标移动部分:
                  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);
回答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);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。