MFC拉框放大、缩小功能如何在鼠标移动时绘制透明矩形框

2019-01-17 11:04:46 浏览数 (1)

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,绘制的矩形框才是透明的。

最后效果图:

0 人点赞