首页

深入理解对话框管理器:自定义 TAB 按键行为  

有人想开发这样一个功能,说界面上有一个多行文本编辑框,他希望用户按下 TAB 按键后可以将输入焦点导航至其他控件,而不是在文本框里默认地输入一个 TAB 字符。 如果是你,你觉得应该怎样做呢? 他琢磨了一下,觉得应该使用子类化的方式来实现这项功能,代码如下: 我想说的是,上图中的做法,有很多错误。 您可以花费大量时间挑剔小细节,例如: 如果未能正确设置对话框中的焦点会怎样? 是否考虑嵌套对话框的...

Visual C++ 2005 可以生成清单信息了  

在 Visual C++ 2005 中,我们可以通过 #pragma 指令来生成你想要的清单信息,这项功能可以简化新版本通用控件的使用。 例如,下面的代码可以指示链接器,将通用控件的新版本(6.0.0.0)链接到应用程序中。 ================================================================ // do not use – ...

Visual Studio 2022 Version 17.9 新功能  

Visual Studio 2022 v17.9 为广大 C++ 开发者引入了一些列好用的新功能和改进优化。 内存布局 现在,你可以使用【内存布局,Memory Layout】功能以可视化的方式来查看对象,结构体及联合体的内存布局信息,这可比以前需要手动查看内存字节流方便多了。 对象大小和对齐 新的【对象大小和对齐】功能,可以为 C++ 开发人员提供有关其数据结构的内存占用情况以及它们在内存中的...

思维调试:为什么FormatMessage提示找不到资源?  

在不调试的情况下解决下面的问题,说明你的思维调试能力又进阶了。 问题 我在调用 FormatMessage 函数加载一个插入的资源字符串,由于某种未知的原因,它没能按预期那样工作。 我要加载的字符串类似于这样的 “Blah blah blah %1. Blah blah blah.” FormatMessage 调用失败了,通过 GetLastError,我得到了具体的错误...

MFC 模态对话框退出机制的探究  

一位读者问了这样一个问题: ” 如果我创建了一个可见的模态对话框,却对用户来说不可用。举个例子,假设我在程序中的其他位置收到一个事件,并且我从事件中调用模态 CDialog 上的 DestroyWindow。我注意到 OnDestroy 是在 CDialog 上调用的,但在将 WM_QUIT 消息发送到模态对话框的消息循环之前,DoModal 永远不会退出。这会导致什么问题?不幸的是,...

傻傻分不清楚:WINVER,_WIN32_WINNT等  

今天就是要弄明白! 所以,经过上一篇的文章的洗礼,你应该知道如何指定 Windows 头文件的具体版本了。如下,你可以看到我们定义了四种不同的宏,是不是有点像孔乙己中不同的”茴”的写法? #define WINVER 0x0400 #define _WIN32_WINNT 0x0400 #define _WIN32_WINDOWS 0x0400 #define _WIN32...

我们需要先弄明白头文件的默认版本  

对于 Windows 头文件来说,一个通用的规则是:如果你没有指定要包含的头文件的具体版本,则默认情况下,你包含的是最新版本的头文件。 举个例子 如果你安装了 Windows XP 平台 SDK,并在你的代码里包含了 ,则你将使用 Windows XP 系统对应的函数原型,结构体以及函数标志位等。 但除非你特别小心的设置各种细节,否则,你的程序将只会在 Windows XP 上运行。 如果你在代码...

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

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

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

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

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

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