windows下方的任务栏位置(为什么任务栏默认会在屏幕底部)

一开始并不是这样

最初的任务栏并不是你今天看到的那样。在那个时候,默认情况下,任务栏会显示在屏幕的顶部,其外观类似于下图:

windows下方的任务栏位置(为什么任务栏默认会在屏幕底部)(1)

这绝对不是它实际的样子,但是因为时间太过久远了,以至于我忘记了它那个时候真实的外观(我没有意识到十年后还会讨论这个),不过基本的外观就是这样的,用它来作为讨论的基础应该也足够了。

重点在于,这个任务栏采用了标签页的形式,而不是采用按钮。每一个标签页都对应一个运行时的窗口,同时窗口会和标签页融合在一起。因此,你可以通过点击不同的标签页来切换不同的窗口。

你可以从标签控件(Tab Control)的TCS_BUTTONS这个类型风格中看到这种设计的痕迹。当我们切换到按钮版本的任务栏后,在实现代码中我们仍然保留了很多基于标签页版本的窗口切换代码,因为相对于重写所有窗口切换代码,我们更倾向于向现有的标签页上添加按钮的风格,这样需要做的工作就会更少。

为什么放弃顶端设计

因为各种不同的原因,标签式的任务栏设计被开发团队丢弃了。其中一个很多人早就意识到的原因是:如果你将任务栏放到屏幕的顶部,那么,大部分的窗口将会被这个任务栏所覆盖,因为在这些窗口的意识里,可用的屏幕区应该从屏幕原点(0, 0)开始。另外一些窗口则会”爬”到任务栏上,因为它们使用到了GetWindowPlacement这个API来保存它们的位置(这个API会尝试返回工作区的坐标,而工作区会从(0, 0)开始计算),但却会使用SetWindowPos来恢复窗口的位置(这个API会使用屏幕坐标系,(0, 0)将会是屏幕的左上角)。

因为有如此多的应用程序窗口都会被位于顶部的任务栏所覆盖,所以我们抛弃了这个任务栏设计,将它放到了屏幕底部。

八年过去了,我们还是会看到这样一番景象:当任务栏被用户设置为停靠在屏幕顶端或者屏幕左侧时,因为应用窗口没搞明白屏幕坐标系和工作区坐标的关系,导致这些窗口还是会被任务栏所覆盖。这确实是一个问题。

总结

作为Windows客户端开发人员,需要搞明白的一个地方就是屏幕坐标系和客户区坐标系的区别。

请记得,屏幕坐标系的原点位于真实屏幕的左上角,而客户区的原点是窗口客户区的左上角,通常这两个点是不重合的。

可以使用这两个API实现这两种坐标系的转换:ClientToScreen和ScreenToClient。

windows下方的任务栏位置(为什么任务栏默认会在屏幕底部)(2)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页