使用CImage双缓冲

void CXXXButton::OnPaint()
{
    CPaintDC dc(this);

    CRect      rect;
    this->GetClientRect(&rect);

    int imageW = m_pImage->GetWidth();          //m_pImage你自己的成员变量,自己去定义吧。
    int imageH = m_pImage->GetHeight();

    CImage memImg;                              //创建CImage缓存
    memImg.Create(rect.Width(), rect.Height(), m_pImage->GetBPP());
    HDC tmpdc = memImg.GetDC();
    CDC memDC;
    memDC.Attach(tmpdc);

    //使用 memDC 开始
    memDC.FillSolidRect(rect, RGB(255, 255, 255));
    m_pImage->Draw(tmpdc, 0, 0, imageW/m_nStates, imageH, imageW*0/m_nStates, 0, imageW/m_nStates, imageH);
    //使用 memDC 结束

    memImg.Draw(dc.m_hDC, 0, 0, rect.Width(), rect.Height());  //将CImage缓存贴到dc上

    memDC.Detach();           //释放这两个,不释放crash
    memImg.ReleaseDC();
}


原文地址:https://www.cnblogs.com/yuzhould/p/4454264.html