绘制的图形太复杂了,在改变窗口大小的时候后会出现不连贯的现象,所以我想干脆在调整窗口大小的时候让OnDraw用单色的矩形代替那些复杂的绘图过程。请问如何实现?

解决方案 »

  1.   

    我想到一个变通的方法,在OnDraw里面设置一个变量bDraw判断是否需要重绘,在OnSize里面将该bDraw = false
    OnDraw(..)
    {
       if(!m_bDraw)
         return;
       //绘图操作
    }
    OnSize(..)
    {
       m_bDraw = false;
       KillTimer(m_nTimer);
       m_nTimer = SetTimer(1,100,0);
    }OnTimer(UINT nIDEvent) 
    {
        m_bDraw = true;
        OnDraw();
    }
      

  2.   

    你用过CAD或者PhotoShop之类的软件么?再复杂的图形,也不会因为太复杂而产生“改变窗口大小的时候后会出现不连贯的现象”,只要你正确使用了双缓冲。正确使用双缓冲的意思是:
    所有绘制的内容只在需要的时候绘制到内存位图中,比如内容修改时;
    在刷新时只需要将内存位图blt到界面DC中,因为只有这一个动作,再怎么刷新也不会有闪烁、不连贯的现象;
    在WM_ERASEBKGND中不绘制背景,所有背景都绘制的内存位图中并全部覆盖界面DC。
    还有刷新时用Invalidate(FALSE)而不是Invalidate(TRUE);
    等剩下一种情况,就是你频繁改动内容,那么就和窗口大小的改变引起的刷新没有关系了。
      

  3.   

    除了楼上说的,需要在内存DC中绘制完成后,再BLT到目标DC上,还需要主要的是:
    在刷新之前,最好通过尺寸的计算,把不需要重新绘制的部分从默认的剪切区去掉。
    这样才能避免不必要的刷新,比如你左上角不变,只是缩小右下角,如果不要求图像大小变化的话
    那显然是不需要重新绘制的。