在做一个位图编辑的东西。
需要有缩放功能,但是当把图像放大显示,然后缩小显示,背景无法清除,请问如何解决。只有窗口切换后,或窗口大小发生变化 后才能清除。
请问大家,这大概是什么原因,哪方面的逻辑出了问题?

解决方案 »

  1.   

    我用Invalidate把整个客户区都无效了,但还是不管用。
      

  2.   

    只有窗口切换后,或窗口大小发生变化 后才能清除.这不就相当于对窗口调用一次Invalidate(TRUE)吗?
      

  3.   

    背景无法清除,看你的wm-erasebackground
      

  4.   

    问题就在这儿,窗口切换或窗口大小变化后能清除说明Invalidate(TRUE)有效。
    但是当我 对图片进行缩放后,显式调用Invalidate(TRUE)却无法擦除背景。
    不知道是什么问题。
      

  5.   

    因为在你窗口尺寸发生变化后,你的显示图片的窗口才会收到重画的消息。
    所以,在你自己变更了图片尺寸后对窗口区域做Invalidate来刷新,不知道你的代码有没有考虑过绘制效率的问题。
      

  6.   

    绘制代码放到OnPaint里面了。
    效率不高,当窗口大小改变时会闪屏。
    恳请楼上指点思路,或提供相关介绍的网页,谢谢。
      

  7.   

    你看d3d画图都是先在后台缓冲区画,画好了再翻转到前台缓冲区,再显示。所谓的离屏缓冲 (offscreen buffer )
    不知道是否对你又启发 
      

  8.   

    Invalidate(True);
    UpdateWindow();
      

  9.   

    我现在也被这个问题所困扰。我的情况是,用AfxRegisterWndClass注册一个窗口具有透明背景的WNDCLASS结构。我想在移动这个窗口的时候,让窗口的背景不断被擦除,以实现窗口背景始终是透明的,在移动的过程当中始终可以看到窗口背景后面的内容。
    我知道窗口被移动时会产生WM_MOVE消息,而且还应该在响应WM_ERASEBKGND消息的处理函数中返回非零值,但是具体该怎么做?求解!