首页

谨慎行事,请编写面向阅读的代码  

编写易于阅读的代码 你可能想着,我代码不是给其他人看的,所以没必要写的那么容易理解。 但是有可能的是,不管怎样,还是会有人在机缘巧合之下研究你的代码,并努力搞明白代码的意图。 而这个人,非常有可能就是编写代码 1 年后之后的你。 我曾经在一篇文章中写道,在设计函数原型的时候,尽量不要使用布尔类型作为函数的参数。有人就说了,”这个应该问题不大吧,你看现在的集成开发环境的 Intellis...

为什么不能在一个禁用的窗口上显示工具提示?  

前段时间,有人问了我这样一个问题,今天来说道说道。 他是这样问的: “当我将鼠标悬停在一个已经被禁用的窗口上时,窗口上对应的工具提示并没有出现? 这个是预期的行为吗?为什么在文档中没有说明?” 实际上,我想你应该已经知道答案了,文档中确实已经有描述过这个行为了,但是你需要将这些片段联合在一起来理解。 当一个窗口被禁用时,它将不会收到任何键盘和鼠标输入的消息。如果你研究一下 ...

小知识:UAC 对话框的颜色所代表的含义  

如果 Windows Vista 启用了用户账户控制(UAC, User Account Control)之后,如果你对一个可执行程序右键,并以管理员身份运行,则会弹出一个权限提升对话框,上面会显示一段警告信息并带有不同的颜色。 下面我们来看看各种不同的颜色所代表的含义 蓝绿色: 如果对话框是蓝绿色,则表明当前应用程序是一个 Windows 内置组件,这种情况请不用过分担心,问题不大。 灰色: ...

对 GetFileVersionInfo 参数的理解  

首先,我们看看官方对 GetFileVersionInfo 的原型: 它的第三个参数 dwLen 指定了客户方提供的缓冲区 (由第四个参数 lpData 指定)大小,以字节为单位。 真的是这样吗? 微软的应用程序兼容团队发现:有一款流行的游戏开发商对这个 dwLen 参数没有透彻的理解。开发人员将这个参数理解为:我希望加载的版本资源长度,并采用了如下的方式进行调用: 他们是这样想的:̶...

两种相同的垂直工具栏标志以及为什么  

可能你很少碰到这样的开发需求,所以本文属于”课外阅读”级别。 有两种方式启用垂直工具栏,一种是指定通用的 CCS_VERT 标志,另外一种,比较罕见:指定工具栏所特有的扩展属性 TBSTYLE_EX_VERTICAL。 问题来了,为什么会存在两个标志来做同一件事情? 因为我们搞砸了。 当初设计 TBSTYLE_EX_VERTICAL 的人没有意识到其实已经有一种通用而简单的...

技法和原理:如何找到你需要的菜单项?  

你一定碰到过查找某个菜单项的场景,通常我们会使用类似于 GetMenuItemInfo 这样的菜单函数, 在这类函数中,有一个参数允许你指定要查找的菜单项目的信息:MF_BYPOSITION 或者 MF_BYCOMMAND。 至此,是不是很眼熟了。今天就来给大伙儿讲讲这个。 从字面意思来理解,MF_BYPOSITION 是根据菜单的位置来进行查找,而 MF_BYCOMMAND 是根据菜单的命令 I...

VS Code C++ 开发:入门和 IntelliSense 配置  

你是否在满天星空下琢磨如何在 VS Code 中配置用于 C++ 开发的智能感知功能(IntelliSense)? 你是否想知道,有没有之中最简单的方法来运行你的 C++ 代码? 好消息是:我们在 C++ 扩展中添加了一些新功能,有了这些好东西,你可以更加轻松从容的配置智能感知功能,并快速上手创建一个 C++ 新项目。 在今天的文章中,我将会讲解使用 C++ 扩展来进行 C++ 快速入门,配置智能...

用户体验设计小知识:勾选框使用细节  

在之前的一篇文章中,我们学习了一个用户体验设计小规则:不要在帮助信息中放置过多的容易误导用户的内容。 同样的,在对话框的交互设计上,我们也需要遵循同样的原则。 例如,我们设计了一个对话框,上面有一个勾选框,勾选框的内容是:关闭 XXX 功能。 请注意,这里的勾选框采用了一种所谓的”否定式”设计,这会让用户陷入一种逻辑迷宫之中。 正确的勾选框文本应该是一种”肯定式...

关于 GETDISPINFO 通知的详细理解  

你可能会经常看到这样的通知消息:XXN_GETDISPINFO,是不是有点印象了? 这个消息的使用场景:当控件要求其父窗口生成(标记为延迟呈现的)信息时,将使用这个 XXN_GETDISPINFO 通知,这些信息可以通过 LPSTR_TEXTCALLBACK 等来显式生成,也可以通过作为所有者数据控件隐式生成。是不是有点绕? 事实上,控件实际上只是请求有关条目信息的代码(通过类似 LVM_GETI...

是时候丢掉 DDE 了  

有人问我这样一个问题: “作为一名应用程序开发者,如果希望和外壳(Explorer/Shell)打交道,我可以直接忽略掉 DDE 吗?” 此问题的答案是:是的,完全没有任何问题。虽然在发明它的 16 位 Windows 协作多任务世界中,它是一个合理的解决方案,但向 32 位 Windows 的过渡对 DDE 来说并不是一件好事。 具体来说,依靠广播来建立初始 DDE 对话...