当前位置:编程学习 > VC++ >>

MFC OnDraw闪烁问题

//填充非滚动区域 CBrush brush(RGB(128,128,128)); FillOutsideRect(pDC,&brush); //填充滚动区域 CSize sztotal=GetTotalSize(); //获取滚动区域的大小 CRect scrollRC(0,0,sztotal.cx,sztotal.cy); //从左上角开始填充 CBrush brush2(RGB(239,243,255)); pDC->FillRect(scrollRC,&brush2); 就这么一点代码,调整窗口大小都明显闪烁。 人家windows自带的画图都不闪烁
答案:首先将你上面的代码用如下代码替换
    CDC dc;
    CBitmap bmp;
    CRect rc;
    GetClientRect(&rc);
    dc.CreateCompatibleDC(pDC);
    bmp.CreateCompatibleBitmap(pDC, rc.Width(), rc.Height());
    dc.SelectObject(&bmp);
    {
        CBrush brush(RGB(128, 128, 128));
        FillOutsideRect(&dc, &brush);
        //填充滚动区域
        CSize sztotal = GetTotalSize(); //获取滚动区域的大小
        CRect scrollRC(0, 0, sztotal.cx, sztotal.cy); //从左上角开始填充
        CBrush brush2(RGB(239, 243, 255));
        dc.FillRect(scrollRC, &brush2);
    }
    pDC->BitBlt(0, 0, rc.Width(), rc.Height(), &dc, 0, 0, SRCCOPY);
 
 
 
另外,还有重要的一步,响应WM_ERASEBKGND消息,并直接返回TRUE,例如
BOOL CTestView::OnEraseBkgnd(CDC* pDC) 
{
    return TRUE;// CScrollView::OnEraseBkgnd(pDC);
}
其他:rg sf 先画到内存DC,后输出到屏幕DC 使用双缓冲绘图,在内存DC中绘图,再用BitBlt拷到屏幕DC中 

上一个:VC中的用户界面线程,工作者线程都是什么意思
下一个:hip_client

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,