出于某种原因,人们把这件事儿想得太难了。如果要创建一个覆盖任务栏的全屏窗口,只需创建一个全屏窗口就行了,任务栏将自动退出。不要四处寻找任务栏并尝试隐藏它:让它做自己的事情。
和往常一样,我们在我们的例子程序中,添加如下的代码:
请注意,此示例程序不必担心会破坏该全屏窗口或阻止用户创建多个窗口。这只是一个个参考的例子。关键是要看看”创建全屏窗口”函数是如何编写的。
我们使用 MonitorFromWindow 这个 AIP 来确定我们应该全屏到哪个显示器。请注意,在多显示器系统中,这可能不是任务栏所在的同一显示器。幸运的是,我们不必担心这一点,API 可以帮忙我们处理底层实现。
我见过人们寻找任务栏窗口的句柄,然后在它上面调用 ShowWindow(hwndTaskbar,SW_HIDE)来尝试隐藏它。由于许多原因,这是疯狂的。
首先,你在评估这样的技巧是否正确时,应该经常使用一个思维实验:”如果两个程序都使用了这个技巧怎么办? 现在,你有两个程序,这两个程序都认为它们负责隐藏和显示任务栏,而这两个程序都不与另一个程序沟通协调。
结果就是一团糟。一个程序隐藏任务栏,然后另一个程序也隐藏任务栏,然后第一个程序的代码流程已完成,因此它显示了任务栏,但第二个程序尚未完成,并在认为此时状态栏还是处于隐藏状态。从这个时间点开始,事情开始走下坡路了。
其次,如果你的程序在显示任务栏之前崩溃,该怎么办?任务栏现在将永久隐藏,用户必须注销并重新打开才能恢复其任务栏。从用户体验来说,这不是很好。
第三,如果根本没有任务栏怎么办?在终端服务器方案中,在没有资源管理器 [存档] 这种情况下自行运行程序是很常见的。在此配置中,没有资源管理器,没有任务栏。或者,也许你正在运行没有任务栏的未来版本的Windows,它已被其他机制所取代。你的程序现在将做什么?
总结
不要对任务栏进行任何这种混乱的操作。你只需创建一个全屏窗口,让任务栏自动执行其操作即可。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《How do I cover the taskbar with a fullscreen window?》
最新评论