首页

第10章节:让我们来深入了解一下WM_NCCALCSIZE消息  

WM_NCCALCSIZE的妙用 当窗口的大小发生变化的时候,Windows会使用WM_NCCALCSIZE这个消息来判断窗口客户区在整个窗口中的所处的位置。 关于这个WM_NCCALCSIZE消息有两种形式。其中比较简单的一种是接收一个窗口矩形,然后它会返回一个客户区矩形。如果你希望窗口在大小发生变化时保持一个预期的客户区矩形(同时考虑菜单栏扩展为多行的情况),则这种方式会比较有用。 关于函数A...

为什么有些人喜欢管任务栏叫”托盘(Tray)”?  

短答案 因为他们叫错了。 长答案 Windows桌面的底部区域的正式名称为”任务栏”。它包含很多不同的小部件,包括”开始菜单”,还有一组所谓的”任务栏按钮”,包括时钟还有通知区域。 一个最常见的错误是将任务栏的通知区域称之为”托盘(Tray)”或”系统托盘(System Tray)̶...

滚动条第9章节:维持隐喻  

何谓”维持隐喻”? 当你看到一个带有滚动条的窗口显示一份文档的时候,这个窗口实际向你透漏这样的信息:当前你只看到了这份文档的一部分而已,这个窗口,你可以理解为一个观察口,用来查看整份文档。 重新调整窗口大小这一行为,实际上是个隐喻:客户区的原点将始终维持在客户区的左上角。但是,如果我们从顶部或者从左侧进行窗口大小调整时,这个隐喻就会被打破。 例如,假设文档的第一行是第十行。...

关于Windows95的一则谣言

蝎子 最近,我注意到长角谣言季(Longhorn Rumor Season)又开始流行起来了,这让我想起了有关Windows 95的一些谣言。 写一篇有关谣言文章的好处之一就是,你所写的不需要一定是对的。即使是你写出了一篇错误的,有误导性的文章,你会说,”哦,微软在产品发布之前已经对这个特性做出了修改。” 然后就不会有人说你写的是错误的了。这就像一场没有受害者的犯罪,当然了...

Win95系统启动音背后的故事

下面的这段音乐,知道的人应该很少了 Doo, dudududingggggg…. ding…. ding… ding… 以上是Windows 95系统启动后播放的音乐,我们称之为”The Microsoft Sound”。下面是关于这个曲子的作者布莱恩·伊诺(Brian Eno)的访谈,大家可以了解了解这首曲子背后的故事。 访谈实录 问题:你是如何创作”The ...

快速解答:我的程序从哪里开始运行?

问题 有一个比较常见的问题是:”我如何知道我运行的程序位于系统的什么地方?我希望可以在那个文件夹里找到一些帮助文档。” 解答 问题的答案:使用系统API函数GetModuleFileName,并传入NULL作为第一个参数。 例如:GetModuleFileName(NULL, …)。

如何确定窗口客户区被覆盖了?  

确定窗口客户区是否被覆盖 如果你根据窗口的可见性来控制窗口的绘制,则之前的一篇文章中介绍的方法十分管用,因为你是借助于绘制系统本身里帮你干了这些脏活累活。 为了在绘制循环之外获取这一信息,可以使用GetDC和GetClipBox这两个API函数。 从GetDC函数获取到的HDC已经是被剪切到可见区域之后的。然后,你可以借助于GetClipBox这个函数来从中获取窗口的状态信息。 下面是我们的例子代...

研究者:住在郊区会使你发胖

在一篇文章(living in the suburbs makes you fat)中,研究者指出:住在郊区会使你发胖。另外,还有所有的超值套餐。 说到超值套餐,WSJ里有这样一篇文章:(people are tearing down their McMansions in order to build… a bigger McMansion)。也即:人们拆掉他们的超级豪宅,是为了建造更大的超级豪...

系统设计之道:将取消作为对话框的默认按钮

为什么大家都喜欢点击取消按钮 显示一个对话框的问题是,人们通常会尝试所有方法来忽略它。网络上有一篇文章讲述了用户如何对待突如其来的对话框,文章的结论是:他们总是尝试尽快清除这些对话框。(因为时代久远,这篇文章已经访问不了了。) 我们也会经常碰到上面提到的问题。比如,当你正在尝试完成任务A时,当A工作正在进行时,突然,一个意外的对话框B弹出来了,这个时候,你不会停止手头的工作,你也不会阅读对话框B上...

安装程序无法校验文件完整性

问题 当你尝试安装一个补丁的时候,你可能会得到如下的错误信息: “安装程序无法校验文件的完整性。请确保加密[cryptographic]服务正在运行。” 通常这表示签名目录(signature catalog)已经被损毁。曾经有一个补丁能解决这个问题,但是,当然了,你不能总是依赖这个补丁,因为你可能没有这个补丁文件,也可能你当时无法安装这个补丁,因为正如错误消息所提示的:签...