MFC之双缓存实现鼠标划线

MFC之双缓存实现鼠标划线

本文实现的是MFC中一个简单的鼠标划线功能,目的是为了实现像电脑中的画图软件中画线一样的效果:鼠标点击后开始划线,随着鼠标的移动,直线也移动变化,最终释放鼠标时完成一条直线的绘制。
为避免绘画中的闪烁,采取了双缓存机制进行绘画。
(一)visual studio2013,创建MFC程序
(二)程序代码
主要是在默认生成的View文件中修改:
1、在MFCTest1View.h头文件中创建变量

private:
    CPoint origin;
    CPoint end;
    BOOL m_bDraw=FALSE;
    CDC BufferDC;
    CBitmap BufferBitmap;

2、OnDraw()函数

// CMFCTest1View 绘制

void CMFCTest1View::OnDraw(CDC* pDC)
{
    CRect rc;
    GetClientRect(&rc);
    if (BufferDC.GetSafeHdc() == NULL){
        BufferDC.CreateCompatibleDC(pDC);
        BufferBitmap.CreateCompatibleBitmap(pDC, rc.Width(), rc.Height());
        BufferDC.SelectObject(&BufferBitmap);
        BufferDC.FillSolidRect(0, 0, rc.Width(), rc.Height(), RGB(255, 255, 255));

    }
    pDC->BitBlt(0, 0, rc.Width(), rc.Height(), &BufferDC, 0, 0, SRCCOPY);



    // TODO:  在此处为本机数据添加绘制代码
}

3、添加的鼠标响应事件

// CMFCTest1View 消息处理程序


void CMFCTest1View::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO:  在此添加消息处理程序代码和/或调用默认值
    BufferDC.SetROP2(R2_NOTXORPEN);
    origin= end = point;
    m_bDraw =TRUE;
    CView::OnLButtonDown(nFlags, point);
}



void CMFCTest1View::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO:  在此添加消息处理程序代码和/或调用默认值

    //BufferDC.MoveTo(origin);
    //BufferDC.LineTo(point);
    m_bDraw = FALSE;

    CView::OnLButtonUp(nFlags, point);
}


void CMFCTest1View::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO:  在此添加消息处理程序代码和/或调用默认值



    if (m_bDraw == TRUE){
        BufferDC.MoveTo(origin);
        BufferDC.LineTo(end);
        BufferDC.MoveTo(origin);
        BufferDC.LineTo(point);
        end = point;
        Invalidate(FALSE);




    }

    CView::OnMouseMove(nFlags, point);
}

/第一次写,先简单记录一下,以后再改进了哈~/
(void*Zhou的首博)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值