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

9 篇文章 0 订阅

1. 在OnMouseMove鼠标移动事件中写入代码:

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事件进行绘制。

     在头文件定义:

CPoint startPt,endPt;
bool LButtonDown;

 3. 在OnLButtonDown事件捕获鼠标按下点并设置LButtonDown的值:

void ClmzWorkView::OnLButtonDown(UINT nFlags, CPoint point)
{
    LButtonDown=true;
    startPt=point;
}

4. 在OnLButtonUp事件捕获鼠标松开点并设置LButtonDown的值:

void ClmzWorkView::OnLButtonUp(UINT nFlags, CPoint point)
{
    LButtonDown = false;
    endPt = point; 
}

注意,绘制时SetROP2方法的参数要设置为R2_NOTXORPEN,绘制的矩形框才是透明的。

最后效果图:

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值