首页

滚动条第11章节:更加深入的理解WM_NCCALCSIZE消息  

当WM_NCCALCSIZE消息的WPARAM为TRUE时,这个消息会呈现出它另外一种更加复杂的形式。 在这种情况下,WM_NCCALCSIZE消息的LPARAM参数实际上是指向一个NCCALCSIZE_PARAM结构体的指针。当Windows发送WM_NCCALCSIZE消息消息时,此结构体会使用如下的方式被填充: > rgrc[0]: 新的窗口矩形(在父窗口坐标系下) > rgrc...

滚动条系列第十章节答案

练习题1: 请解释为什么使用0x7FFF来代表无限高度? 答案:Reiko在评论中所说的答案是正确的。因为在Windows 95/98/ME上,0x7FFF是被支持的最大整数坐标值,所以这里使用到了这个值来代表无限高度。 练习题2: 请解释代码行:rcWindow.bottom += rcTemp.top。 答案:这一行代码可以使用如下的更加精确的格式: rcWindow.bottom += (r...

Windows解惑:为什么任务栏默认会在屏幕底部  

一开始并不是这样 最初的任务栏并不是你今天看到的那样。在那个时候,默认情况下,任务栏会显示在屏幕的顶部,其外观类似于下图: 这绝对不是它实际的样子,但是因为时间太过久远了,以至于我忘记了它那个时候真实的外观(我没有意识到十年后还会讨论这个),不过基本的外观就是这样的,用它来作为讨论的基础应该也足够了。 重点在于,这个任务栏采用了标签页的形式,而不是采用按钮。每一个标签页都对应一个运行时的窗口,同...

第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这个函数来从中获取窗口的状态信息。 下面是我们的例子代...