生成的图片,每次窗口刷新的时候,都会闪烁。我使用了“双缓冲” 还是闪烁,我不知道代码哪里错了,等待指教Image *m_pImage = Image::FromFile(_T("D:\\DSC01972.JPG"),FALSE);void Mypic::OnPaint()
{ CPaintDC dc(this);
if (imgok) 
{
CRect rcClient;
GetClientRect(&rcClient); Bitmap memoryBitmap(rcClient.Width(), rcClient.Height()); Graphics *memoryGraphics = Graphics::FromImage(&memoryBitmap);   //内存中的图像 memoryGraphics->DrawImage(m_pImage, rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height()); delete memoryGraphics; Graphics graphics(dc);
graphics.DrawImage(&memoryBitmap, rcClient.left, rcClient.top, rcClient.Width(), rcClient.Height()); }
}

解决方案 »

  1.   

    BOOL Mypic::OnEraseBkgnd(CDC* pDC)
    {
    return TRUE;
    }重载了,不行的,还是闪烁
      

  2.   

    这个 图片,是放在  SCROLLVIEW 里面的,不是放在 DIALOG 里面我实过,在 DIALOG 里面,不会闪烁请问这是为什么
      

  3.   

    你试试这个类,CZoomView,基本可用
    http://www.codeproject.com/KB/docview/McCZoomView.aspx
      

  4.   

    在 VIEW 的 ONDRAW 里面用下面的代码绘的图,是不会闪烁的,如果用上面的 Graphics 的绘图方法,VIEW 就会有闪烁cimage m_MainBGFile;m_MainBGFile.StretchBlt(pDC->m_hDC,CRect(&m_RectMainBG),SRCCOPY);
    可是 CIMAGE 这个东西,好像无法画真彩的位图,画出来的东西,明显失真。
      

  5.   

    SCROLLVIEW,滚动条的消息会接收两遍吧,第一遍是实际的操作,第二遍是通知操作完成(不应该被处理)。
      

  6.   

    在 VIEW 的 ONDRAW 里面用下面的代码绘的图,是不会闪烁的,如果用上面的 Graphics 的绘图方法,VIEW 就会有闪烁  ?直接绘制呢? 跟cimage 的一样
      

  7.   

    直接绘制,当然也是闪烁啊不然我怎么会去折腾双缓冲我觉得好像是我的 OnEraseBkgnd 问题(我假设我的图片在固定位置 (0,0,500,500))BOOL CmyscrollView::OnEraseBkgnd(CDC* pDC)
    {
    // get client rectangle
    CRect rcClient;
    GetClientRect(&rcClient); // get image rectangle
    CRect rcImage(0,0,500,500);
    //GetImageRect(rcImage);        // create clipping region
    CRgn clipRgn;
    clipRgn.CreateRectRgnIndirect(&rcClient);
    pDC->SelectClipRgn(&clipRgn);
    pDC->ExcludeClipRect(&rcImage); CBrush brush(RGB(255,255,255)); // 白色
    pDC->FillRect(&rcClient, &brush); pDC->SelectClipRgn(NULL);     return  TRUE;
    // return CScrollView::OnEraseBkgnd(pDC);
    }有问题吗?
      

  8.   

    “每次窗口刷新的时候”具体是哪些情况?给窗口加上WS_CLIPCHILDREN风格试试。