我作了个DLL,把它插入EXPLORER里,
拦截WM_NOTIFY,在桌面上绘制自己的墙纸,
问题是,桌面上的窗口移动时,系统先画原来系统的墙纸,
再画我的墙纸,造成闪烁.我又拦截PaintDesktop()和消息WM_ERASEBKGND都没有解决问题.
各位高人,怎么解决这个问题?能讲一下Windows显示桌面墙纸的原理吗?

解决方案 »

  1.   

    曾经看过,在《c++ builder 深度历险》里有讲到,楼主可到找来看看
      

  2.   

    一般设置墙纸是用IActiveDesktop来做的,不知道lz是要做什么?
      

  3.   

    我只是想把墙纸像幻灯片一样显示
    IActiveDesktop会造成闪烁,速度又慢,占用资源太大
      

  4.   

    如果是在你自己的程序需要这样做的话,只要做一个全屏的桌面,然后在上面显示图片,在OnTimer里面换图片,用双缓冲和MMX等方式加快显示速度,这样就能做到幻灯片的效果了。
      

  5.   

    墙纸不是explorer绘制的,而是由csrss绘制的,结束掉explorer还能见到墙纸就是最好的证明.双缓冲用了没?估计是绘制的机制不同.
      

  6.   


    那explorer是如何显示墙纸的,是PaintDesktop()吗?
    我HOOK它PaintDesktop()之后,explorer依然可以显示墙纸
      

  7.   

    截获桌面DC,创建与之兼容的内存DC,将你的图象载入内存DC,最后BITBLT到桌面DC