对话框中运用双缓冲

对话框中使用双缓冲
C/C++ code

void CMfcTestDlg::OnPaint() 
{
    CPaintDC dc(this);
    DrawLine(&dc);
}
void CMfcTestDlg::DrawLine(CDC *pDC)
{
    CRect rect;
    GetClientRect(&rect);
    CDC dc;//创建用于作图的内存DC
    CBitmap bmp;//内存中承载临时图像的位图
    dc.CreateCompatibleDC(pDC);//创建兼容内存DC
    bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());//创建兼容的位图

    dc.SelectObject(&bmp);
    srand((unsigned int) time(NULL));
    dc.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255));
    CPen pen(PS_SOLID,2,RGB(0,255,30));
    dc.SelectObject(&pen);
    for (int i =0 ;i != 30;i++)
    {
        dc.MoveTo(20,i+20*i);    
        dc.LineTo(800,i+20*i);
    }
    for (i =0;i != 10;i++)
    {
        int x,y;
        x = rand()%741;
        y = rand()%564;
        dc.LineTo(x,y);
    }
    pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);//缓冲区的图像拷到前台
    dc.DeleteDC();
    bmp.DeleteObject();
}


代码如上,不知道什么问题,重绘还是有闪烁的问题,特别是对话框上面的按钮!

------解决方案--------------------
dc.SetBkMode(TRANSPARENT)看看
------解决方案--------------------
OnEraseBkgnd 有没有 return TRUE ?
对话框风格有没有设置CLIP_CHILDREN风格?
------解决方案--------------------
是重绘的整个对话框吧,上面的按钮当然要重绘了。试试只重绘不包括按钮的区域