当前位置:C++技术网 > 资讯 > 重叠窗口显示问题.用SetWindowPos解决不了问题.

重叠窗口显示问题.用SetWindowPos解决不了问题.

更新时间:2016-09-21 14:01:32浏览次数:1+次

当两个窗口重叠时,我要把下面的窗口显示出来再马上隐藏了.

ShowWindow(SW_SHOW);

....

ShowWindow(SW_HIDE);

这样.但这时就会出现闪屏.如果循环这样做,就感觉眼睛闪的厉害.怎么解决不闪呢.用SetWindowPos解决不了问题.


C++技术网解答:

    闪烁的原因见:绘图技术的闪烁原因探究3:深入分析绘图闪烁原因和详细解释解决闪烁办法

    先看上面文章了解闪烁的根本原因。你先显示出来,然后再隐藏,也就是在屏幕上不断的显示再隐藏。这个不可避免的闪烁。显示-隐藏-显示-隐藏,如果你要这样的效果,则没有办法避免闪烁,因为这样就是实现闪烁的做法,又如何避免闪烁呢?

    如果只是显示出来,程序操作这个窗口,则没有必要显示到最顶层。直接通过窗口句柄给窗口发消息即可,窗口不是最顶层一样是可以接受消息和处理消息的。如果你要用户交互,自然也不会频繁的显示和隐藏了。可以断定,你是程序来操作窗口,既然如此,那就不要改变窗口的层次,也就是不要显示窗口再隐藏窗口,直接给窗口通信即可。对于窗口的显示和隐藏,是和用户交互的。

    因为你描述的只是窗口重叠,并没有描述实现的功能目的,就只能针对这个现象做分析。给你提供的一个处理思路。

    总结下:如果只是程序操作窗口,不要显示隐藏窗口,直接和窗口发消息通信即可。这样就可以避开闪烁问题。如果硬是要显示和隐藏,这是没有办法避开闪烁的。可能显示窗口再隐藏窗口是比较直接的思路,但是不满意,你就要考虑问题的本质,从而绕过直接的思维,就可以绕过闪烁问题。我们这里就是程序操作窗口,并不需要看得到,看不到也是可以操作的。不然窗口最小化的时候,你怎么还原的了窗口。