void CPlayerDlg::display(CString ls_str_filename,CDC *pDC)
{
HBITMAP Bitmap,pOldBitmap;
CRect rect;
CDC memdc;
GetDlgItem(IDC_STATIC)->GetClientRect(rect);
    Bitmap=(HBITMAP) LoadImage(AfxGetInstanceHandle(),ls_str_filename,IMAGE_BITMAP,rect.right-rect.left,rect.bottom-rect.top,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    memdc.CreateCompatibleDC(pDC);
pOldBitmap=(HBITMAP)memdc.SelectObject(Bitmap);
    pDC->BitBlt(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,&memdc,0,0,SRCCOPY);
    memdc.SelectObject(pOldBitmap);
}
我必须在OnPaint中调此函数,并在需要加载时Invalidate()这样引起我的整个屏幕闪烁,因我的背景也是一幅图片,可否有其它方式呀?并使图片改为我指定区域大小

解决方案 »

  1.   

    双缓冲就是除了在屏幕上有
    图形进行显示以外,在内存中也有图形在绘制。我们可以把要显示的图形先在内存中
    绘制好,然后再一次性的将内存中的图形按照一个点一个点地覆盖到屏幕上去(这个
    过程非常快,因为是非常规整的内存拷贝)。这样在内存中绘图时,随便用什么反差
    大的背景色进行清除都不会闪,因为看不见。当贴到屏幕上时,因为内存中最终的图形
    与屏幕显示图形差别很小(如果没有运动,当然就没有差别),这样看起来就不会闪。