Windows解惑:为什么任务栏默认会在屏幕底部
一开始并不是这样
最初的任务栏并不是你今天看到的那样 。 在那个时候 , 默认情况下 , 任务栏会显示在屏幕的顶部 , 其外观类似于下图:

文章图片
这绝对不是它实际的样子 , 但是因为时间太过久远了 , 以至于我忘记了它那个时候真实的外观(我没有意识到十年后还会讨论这个) , 不过基本的外观就是这样的 , 用它来作为讨论的基础应该也足够了 。
重点在于 , 这个任务栏采用了标签页的形式 , 而不是采用按钮 。 每一个标签页都对应一个运行时的窗口 , 同时窗口会和标签页融合在一起 。 因此 , 你可以通过点击不同的标签页来切换不同的窗口 。
你可以从标签控件(TabControl)的TCS_BUTTONS这个类型风格中看到这种设计的痕迹 。 当我们切换到按钮版本的任务栏后 , 在实现代码中我们仍然保留了很多基于标签页版本的窗口切换代码 , 因为相对于重写所有窗口切换代码 , 我们更倾向于向现有的标签页上添加按钮的风格 , 这样需要做的工作就会更少 。
为什么放弃顶端设计
因为各种不同的原因 , 标签式的任务栏设计被开发团队丢弃了 。 其中一个很多人早就意识到的原因是:如果你将任务栏放到屏幕的顶部 , 那么 , 大部分的窗口将会被这个任务栏所覆盖 , 因为在这些窗口的意识里 , 可用的屏幕区应该从屏幕原点(0,0)开始 。 另外一些窗口则会”爬”到任务栏上 , 因为它们使用到了GetWindowPlacement这个API来保存它们的位置(这个API会尝试返回工作区的坐标 , 而工作区会从(0,0)开始计算) , 但却会使用SetWindowPos来恢复窗口的位置(这个API会使用屏幕坐标系 , (0,0)将会是屏幕的左上角) 。
【Windows解惑:为什么任务栏默认会在屏幕底部】因为有如此多的应用程序窗口都会被位于顶部的任务栏所覆盖 , 所以我们抛弃了这个任务栏设计 , 将它放到了屏幕底部 。
八年过去了 , 我们还是会看到这样一番景象:如果任务栏被用户设置为停靠在屏幕顶端或者屏幕左侧时 , 因为应用窗口没搞明白屏幕坐标系和工作区坐标的关系 , 导致这些窗口还是会被任务栏所覆盖 。 这确实是一个问题 。
总结
作为Windows客户端开发人员 , 需要搞明白的一个地方就是屏幕坐标系和客户区坐标系的区别 。
请记得 , 屏幕坐标系的原点位于真实屏幕的左上角 , 而客户区的原点是窗口客户区的左上角 , 通常这两个点是不重合的 。
可以使用这两个API实现这两种坐标系的转换:ClientToScreen和ScreenToClient 。

文章图片
推荐阅读
- 辟谣!风湿病为什么叫“风湿”?是受风受潮湿造成的吗?
- 为什么工作场所是工厂,发工资却是中介,这有什么区别?
- 为什么刘备在世时,蜀国人才济济,刘备死后,蜀国人才凋零?
- “独眼龙”夏侯惇有多厉害?为什么能两次打败巅峰时期的赵云?
- 负利率危险!鲍威尔最新访谈:为什么美联储对负利率说不
- 马云马云的妻子张瑛有多优秀?为什么她不像刘强东妻子章泽天那样经常出现?
- 为什么车没开出去就坏了?你看完就知道了!
- 为什么年轻人不喜欢跟团?这4个自由行好处,相信你也会感同身受
- 为什么疫情之后康养产业站上了风口?
- 第五人格:细节决定成败!同样的天赋加点,为什么你总会“秒倒”
