建立个单文档程序,在CXXXView::OnDraw/OnPaint下用设备DC->FillSolidRect(rect, RGB(255,0,255));rect为GetClientRect得的.
再在CXXXView::OnEraseBkgnd下用pDC->FillSolidRect(rect, RGB(0,255,255));画个背景色.当窗口大小被改变时,变得很恐怖,怎么解决呢?双缓冲?谁演示下.

解决方案 »

  1.   

    变得很恐怖,是不是闪烁得厉害?那是因为一个区域变得无效的时候,窗口会调OnEraseBkgnd重绘背景,然后才是OnPaint,你相当于画了两次啰窗口调整大小出现闪屏是很难避免的,即使你要使用双缓冲,因为在OnSize的时候,off screen的大小也要调整,相当于频繁地创建/删除 创建/删除……或者你改一下windows的设置“在改变窗口大小时不显示其内容”,这样会好得多
      

  2.   

    闪烁的很厉害,只能用双缓冲解决。OnEraseBkgnd中直接return TRUE;OnPaint中先创建一个memDC,刷背景和正常绘制全部以这个memDC为目标,所有绘制都完成后再把这个memDC Bitblt到设备dc上去,就不会有任何闪烁了。
      

  3.   

    CDC MemDC;
    CBitmap m_bitmap;
    MemDC.CreateCompatibleDC(NULL);
    m_bitmap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height()); MemDC.SelectObject(&m_bitmap); MemDC.FillSolidRect(rect, RGB(0,0,0)); MemDC.FillSolidRect(rect, RGB(255,0, 255)); dc.BitBlt(0, 0, rect.Width(), rect.Height(), &MemDC, 0, 0, SRCCOPY);这个解决闪是可以的,但是看下图:
    当本窗口的后面一个窗口是VC环境时,就像这个了