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

本文介绍如何使用MFC在视图中通过鼠标拖拽的方式绘制矩形,具体包括四个关键步骤:定义全局变量保存起始点和结束点坐标及鼠标状态;在OnMouseMove事件中根据鼠标状态绘制矩形;在OnLButtonDown事件中记录鼠标按下位置;在OnLButtonUp事件中记录鼠标释放位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

最后效果图:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值