VC绘制控件如何防止闪烁

理论上不管什么控件都适用,方法如下:

新建一个MFC类,继承原来的控件类型,对于VC自动生成的类进行如下改动:


首先覆盖 OnEraseBkgnd() 防止擦除时填涂背景:

BOOL CXXXCtrl::OnEraseBkgnd(CDC* pDC)
{
    
return TRUE;
}

 

 

然后覆盖 OnPaint(),原理是先在内存DC中绘图,之后再一股脑将画出的东东填涂到窗体上。

 

ExpandedBlockStart.gif代码
void CXXXCtrl::OnPaint()
{
    CPaintDC dc(this);
    
// TODO: 在此处添加消息处理程序代码
    CRect rect;
    CRect headerRect;
    CDC dcMem;    //内存DC
    CBitmap bmpMem;

    GetClientRect(&rect);
    dcMem.CreateCompatibleDC(&dc);
    bmpMem.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
    dcMem.SelectObject(&bmpMem);
    dcMem.FillSolidRect(&rect, RGB(255,255,255));

    
//这一句是调用默认的OnPaint(),把图形画在内存DC上
    DefWindowProc(WM_PAINT, (WPARAM)dcMem.m_hDC, (LPARAM)0);

    
//输出
    dc.BitBlt(0,
        
0,
        rect.Width(),
        rect.Height(),
        
&dcMem,
        
0,
        
0,
        SRCCOPY);
    dcMem.DeleteDC();
    bmpMem.DeleteObject();
}

 

 

转载于:https://www.cnblogs.com/ddgg/archive/2010/07/16/1779131.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值