VC用异或笔画动态拖选框(方框随着鼠标拖动而变化)

本文介绍如何使用 C++ 在 Windows 平台上实现拖拽选择框功能,通过鼠标的移动来绘制矩形选区,并利用 R2_NOTXORPEN 绘画模式实现选区的动态更新。

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


描述:我们平时想要选择一个区域东西的时候,会用鼠标拖动选择,那个时候会有一个随着鼠标动的方框,下面的代码就是实现这个的

先说下异或笔:
R2_NOTXORPEN是C++中一种绘画模式,它先把画笔颜色与屏幕颜色异或,(这里异或是数学计算,1与1为0,1与0为1,我们说颜色其实就是二进制数,)异或之后再取反最后得到一个颜色值显示在屏幕上。
举个例子,你使用R2_NOTXORPEN这种绘画模式,你用红色画笔在黑色背景上画一条直线,显示红色,但你再用这只笔在刚画的直线上重画一遍,就相当于把开始画的红线擦除掉了,划线的地方显示为背景色
void Clesson4View::OnMouseMove(UINT nFlags, CPoint point)
{   
  
     if (m_bdraw)   
 {   
    
        CClientDC dc(this);
 
        CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));   
        CBrush *PoldBrush=dc.SelectObject(pBrush); 
        int oldmode=dc.SetROP2(R2_NOTXORPEN);
        //dc.Ellipse(CRect(m_beginpoint,m_movepoint));
        dc.Rectangle(CRect(m_beginpoint,m_movepoint));
        m_movepoint=point;
        //dc.Ellipse(CRect(m_beginpoint,m_movepoint));
        dc.Rectangle(CRect(m_beginpoint,m_movepoint));
        dc.SelectObject(PoldBrush);
        dc.SetROP2(oldmode);  
      //  m_movepoint=point;  
        //dc.Rectangle(CRect(m_beginpoint,m_movepoint));
        //dc.Ellipse(CRect(m_beginpoint,m_movepoint));
 
        ReleaseDC(&dc);           
 }   
   
  CView::OnMouseMove(nFlags, point);   
}  
 

void Clesson4View::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    m_beginpoint=point;
    m_bdraw=true;
    m_beginpoint = m_movepoint = point; 
 
    CView::OnLButtonDown(nFlags, point);
}
 
 
void Clesson4View::OnLButtonUp(UINT nFlags, CPoint point)
{
    m_bdraw=false;
    CView::OnLButtonUp(nFlags, point);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值