1. 在OnMouseMove鼠标移动事件中写入代码:
代码语言:javascript复制void ClmzWorkView::OnMouseMove(UINT nFlags, CPoint point)
{
if (LButtonDown == true)
{
CDC *pDC = GetDC();
pDC->SetROP2(R2_NOTXORPEN);
CRect rect(startPt,endPt);
pDC->Rectangle(rect);
CRect rect2(startPt,point);
pDC->Rectangle(rect2);
endPt = point;
ReleaseDC(pDC);
}
}
2. 定义全局变量:两个CPoint类型的点startPt,endPt,用于保存鼠标按下的点和鼠标松开的点;bool类型变量LButtonDown 用于保存鼠标的状态,值为true时表示鼠标按下,相反表示鼠标松开,只有当鼠标按下还未松开时才进行矩形框的绘制,否则会一
直调用OnMouseMove事件进行绘制。
在头文件定义:
代码语言:javascript复制CPoint startPt,endPt;
bool LButtonDown;
3. 在OnLButtonDown事件捕获鼠标按下点并设置LButtonDown的值:
代码语言:javascript复制void ClmzWorkView::OnLButtonDown(UINT nFlags, CPoint point)
{
LButtonDown=true;
startPt=point;
}
4. 在OnLButtonUp事件捕获鼠标松开点并设置LButtonDown的值:
代码语言:javascript复制void ClmzWorkView::OnLButtonUp(UINT nFlags, CPoint point)
{
LButtonDown = false;
endPt = point;
}
注意,绘制时SetROP2方法的参数要设置为R2_NOTXORPEN,绘制的矩形框才是透明的。
最后效果图: