- 博客(524)
- 收藏
- 关注
原创 为什么 SetWindowsHookEx 采用 HINSTANCE 参数?
做 Windows 世界的良好公民,不要随意使用钩子。除非迫不得已。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Why does SetWindowsHookEx take an HINSTANCE parameter?
2023-09-26 10:18:17
36
原创 Visual Studio 功能增强:CMake 目标视图
现在,你可以使用新的CMakeTargetsViewExcludedItems 字段在 VSWorkspaceSettings.json 中定义要从 CMake 目标视图中排除的项目。CMakeTargetsViewExcludedItems 字段是一个字符串数组。该字段支持以下语法和标识符:CMakeTargetsViewExcludedItems 的语法:这将指定具有指定名称的任何标识符。例如,CMakeTarget:app。
2023-09-23 22:39:58
83
原创 Visual Studio 更新:远程文件管理器
Visual Studio 推出的远程文件管理器确实可以有效提升跨平台开发者的工作效率,原因是开发者无需在不同的工具之间进行切换,提升了心流的一致性体验。老大哥好样的!Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
2023-09-20 09:51:10
450
原创 VS新功能:智能添加函数标记
看来以下两项代码风格已经渐渐成为 C++ 社区的共识:1) 将不会修改对象状态的成员函数标记为 const。2) 将全局函数标记为 static。既然大多数人都这样做,我们小小开发者也跟随就可以了。(别整那些新玩意儿)Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
2023-09-17 10:00:59
67
原创 浅谈 DLL 导出函数中的转发器函数
如果你是在 32 位 Windows 平台上做开发,则始终使用名称,而不是序号进行 DLL 调用,这样会免去很多麻烦。毕竟,写入到 SDK 中的名称,不太可能随随便便的改变。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Exported functions that are really forwarders》
2023-09-14 09:55:09
63
原创 在32位Windows中,DLL是如何导出的?
如果你是在 32 位 Windows 平台上做开发,则始终使用名称,而不是序号进行 DLL 调用,这样会免去很多麻烦。毕竟,写入到 SDK 中的名称,不太可能随随便便的改变。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《How are DLL functions exported in 32-bit Windows?
2023-09-11 09:27:20
83
原创 调试心得:通过观察正常的程序行为来识别Bug
随着代码规模越来越大,诊断机制需要进一步完善,单纯通过下断点调试可能不是那么有效了,这个时候,需要结合调试输出和日志来查找问题。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Before you can learn to recognize what’s wrong, you must learn to recognize what’s right》
2023-09-08 07:53:42
298
原创 安全编程:初始化那些你忽略掉的东西
道高一尺魔高一丈,我们必须小心行事。写代码的同时,也将自己带入到黑客角色问自己:”这段代码会不会有安全漏洞?Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Security: Don’t forget to initialize the stuff you don’t care about》
2023-09-05 09:27:13
102
原创 在工具提示中使用自绘修改字体
在 Windows 界面开发中,我们有时候不希望使用系统默认给我们的界面样式,但没关系,我们有自绘这种方法来绘制我们想要的样式,是不是感觉又有希望了呢?Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Using custom-draw in tooltips to adjust the font》
2023-09-02 11:38:56
150
原创 软件的可用性改善:善用帮助信息
如果时常以用户的角度来使用软件,你会发现:工具提示真的是一个十分十分好用的特性。那么,现在立即就在你的软件里加上这个功能吧!Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Coding in-place tooltips》
2023-08-30 10:30:26
86
原创 思维调试:理解 DDE 的初始化过程
如果你要实现了一个 DDE 服务器,请确保在主线程开始处理消息之前就启动它。否则,应用程序启动和尝试与之通信的外壳之间存在竞争条件。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Psychic debugging: Understanding DDE initiation》
2023-08-24 09:26:39
90
原创 修改窗口类的属性将影响所有该类的窗口
我们可以将窗口类看做一个制造窗口的模版,所有自该窗口类产生的窗口都具有相同的属性,修改了模版的属性,则所有窗口的属性都会发生变化。有时候,这是好事,但我们必须了解其原理。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Window class properties apply to all windows that belong to the class》
2023-08-21 10:18:23
122
原创 浅谈更糟糕的 CS_CLASSDC 标志位的作用
今天的总结是:CS_CLASSDC 咱哥几个是碰都不要碰,谁碰谁知道。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《What does the CS_CLASSDC class style do?
2023-08-19 11:41:38
129
原创 浅谈 CS_OWNDC 标志位的作用
对于自己不了解的东西,要小心谨慎的尝试,决不能先入为主。像一个婴儿一样对待所有新生事物,正所谓:一叶障目也。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《What does the CS_OWNDC class style do?
2023-08-16 09:50:58
91
原创 警惕 C++ 中的隐式类型转换
通过今天的文章,我终于理解了在何种情况下需要在构造函数上加 explicit。你呢?Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Beware the C++ implicit conversion》
2023-08-13 13:31:03
251
原创 使用 Visual Studio Code 调试 CMake 脚本
有了调试器,妈妈再也不担心编写 CMake 脚本了。Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。本文来自:《Introducing CMake Debugger in VS Code: Debug your CMake Scripts using Open-Source CMake Debugger》
2023-08-10 13:47:59
570
原创 谈谈如何使用ShellExecute的返回值
进入到 32 位 Windows 的世界后,实例句柄我已经很少用到了。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《What can I do with the HINSTANCE returned by the ShellExecute function?
2023-08-07 09:34:41
131
原创 古老的新玩法:使用命令行做些简单的计算
这个确实是一种新玩法,如果你对命令行情有独钟的话。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Doing quick arithmetic from the command prompt》
2023-08-04 14:17:07
129
原创 位图和 DC 有什么特别之处?
本文的核心观点是:应用程序不能一次将单个位图选择到多个 DC 中。GDI 这套图形绘制引擎,相对于新出来的 DirectX 来说,属实有点老了。但廉颇虽老,但还是行的。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《What’s so special about bitmaps and DCs?
2023-08-01 10:52:57
179
原创 CS_SAVEBITS 这个样式有什么作用?
记住一点,仅在这些窗口上使用 CS_SAVEBITS : 菜单、工具提示和小的对话框。亲爱的你,记住了吗?Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《What does CS_SAVEBITS do?
2023-07-29 23:29:40
224
原创 请将所有未处理的消息传递给 DefWindowProc
我想这里作者的原则很简单:对于你不想处理的消息,不要处理并简单返回 0,而是交给系统默认处理函数 DefWindowProc。否则,各种意外会发生。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《No, really, you need to pass all unhandled messages to DefWindowProc》
2023-07-26 10:01:07
104
原创 向API添加标志位并不具备扩展性
尽可能地在设计之初就固定好各个组件之间的接口参数,而不是在后期为了解决问题而随意添加参数,这样只会让代码的”坏味道”越来越重,最后积重难返。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Adding flags to APIs to work around driver bugs doesn’t scale》
2023-07-23 09:25:41
105
原创 为什么组合框的大小包括下拉列表的大小?
虽然新版本共用控件库已经帮我们自动解决了此问题,但是知道它的来龙去脉,也是不错的。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Why does the size of a combo box include the size of the drop-down?
2023-07-20 09:44:39
154
原创 Visual Studio 中的新特性:可视化宏扩展
你呀,总能给我整出点新花样。Microsoft Visual C++团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C++的知识和最新开发进展。大浪淘沙,如果你对Visual C++这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。本文来自:《Visualize Macro Expansion for C++》
2023-07-17 17:00:05
515
原创 Visual Studio 新功能:Include 语句清理
你还可以灵活地自定义 Include 清理生成建议的方式,使其能够无缝适应并与复杂而广泛的代码库集成。通过进行这些更改或调整,可以确保该过程更好地与项目的特定需求和复杂性保持一致,从而实现更高效和有效的代码清理。在 EditorConfig(EditorConfig 设置)中,你可以添加单个头文件,如果要包含多个头文件,则应使用逗号分隔它们。这个虽然是一个小功能,但是对于我来说还挺有用,你不必手动添加或删除头文件包含,系统会自动为你分析出来。
2023-07-13 10:10:05
452
原创 小细节:窗口的标题栏实际上还包含边框
对于非客户区的呈现,我还是建议使用系统默认的实现,客户区才是你发挥才华的地方。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《If you ask for a window caption, you also get a border》
2023-07-10 11:10:16
199
原创 浅谈无效化一个空窗口的后果
请立即全文搜索你的代码中的所有 InvalidateRect 调用,看看第一个参数是否为 NULL。反正我等会就会去这样做。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《The consequences of invalidating the null window》
2023-07-07 16:42:09
161
原创 为什么向导式对话框中的取消按钮始终可用
任何时候,都不要对你的用户做那样残忍的事情,这只会让你的用户心生绝望并远离。始终在用户界面上开放一个 [取消] 入口,人生没有后悔药,但是软件有。用户应该始终可以取消他准备做的事情。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Why can’t I disable the Cancel button in a wizard?
2023-07-04 11:18:54
97
原创 枚举一个进程中的所有线程
一般我们会将应用程序的设置数据保存到注册表,这很方便,但是记得读取的时候,尽量只读一次并缓存结果,而不是每次都从注册表里读取,这对运行时性能是有伤害的。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Enumerating threads in a process》
2023-07-01 19:55:50
267
原创 浅谈注册表读取所需要付出的性能代价
一般我们会将应用程序的设置数据保存到注册表,这很方便,但是记得读取的时候,尽量只读一次并缓存结果,而不是每次都从注册表里读取,这对运行时性能是有伤害的。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《The performance cost of reading a registry key》
2023-06-28 10:09:41
98
原创 为什么单击并按住标题栏,程序运行得更快?
我曾经也想过将程序的每次状态变更都呈现在用户界面上,觉得这可以让用户了解程序的实时运行状态。但是在后来的实际体验中,我感觉这并不是想象中那样美好。从用户的角度来说,他/她所希望的事情是:赶紧帮我把活儿做完,别成天整这些花里胡哨的东西。确实如此!毕竟大家都这么忙。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
2023-06-25 10:12:43
109
原创 我们曾相信开发者会做正确的事情之二
很多商业上的失败案例可以总结为:其实这事儿本来挺好的,但架不住人心险恶啊。话说回来,作为我们开发者,我们需时刻考虑最坏情况,你的代码需要尽可能稳固。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Because programmers were trusted to do the right thing, part 2》
2023-06-22 23:11:08
62
原创 在用户界面线程上等待的危险性
对于在用户界面线程中执行的代码,我的观点是:不是非常必要,都不要使用 Sleep。人的生命是有限的,软件运行的快,是一个终极需求。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《The dangers of sleeping on a UI thread》
2023-06-19 11:02:05
1574
原创 损坏的二进制文件会导致“程序太大而无法放入内存”
如果是开发应用程序,而不是操作系统,在一段数据一开始就被检测到是无效的,我们应该立即停止后续处理,给出错误提示,并崩溃退出。容忍度:零。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《Why does a corrupted binary sometimes result in “Program too big to fit in memory”?
2023-06-16 09:56:03
1342
原创 关于 MsgWaitForMultipleObjects 的理解
有那么一种感觉不知对不对。MsgWaitForMultipleObjects 这个函数适用于一些比较复杂的业务场景,里面会涉及:线程同步对象,用户界面,窗口句柄,Windows 消息。我的拓扑梅尔智慧办公平台 (Topomel Box) 在代码设计不复杂,甚至会特意追求一种更为简单的,老百姓容易的方式来进行架构设计。为什么?只因我确实愚笨,搞不定太复杂的东西。“简约而不简单”
2023-06-13 10:59:47
1765
原创 虚函数表不一定总是在对象的起始位置
虚函数是 C++ 实现动态绑定的基础,这话,我妹说错吧?Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《The vtable does not always go at the start of the object》
2023-06-10 19:32:26
578
原创 ReadProcessMemory可不是一个进程间通信的好方法
目前小僧仅仅使用到了共享内存,惭愧惭愧。什么邮槽管道剪贴板,我是一个都没有听说过。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《ReadProcessMemory is not a preferred IPC mechanism》
2023-06-07 10:16:37
111
原创 调用函数不仅仅只是传递正确的参数类型
深刻理解函数调用的机制,需向下探索到汇编代码层级,底层摸透之后,回头再看,便觉得一切都是那么自然。正所谓:道法自然。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《There’s more to calling a function than just getting the types to match》
2023-06-04 18:54:54
577
原创 调试代码可能会成为潜在的安全漏洞
在开发拓扑梅尔智慧办公平台 (Topomel Box) 的初始阶段,我花了些功夫研究了一些和”主业”不那么相关的主题,例如网络传输加密,本地数据加密等,虽然这会导致进度缓慢,但带来的是那些看不到的回报,例如: “用户的信任”。我们不能辜负用户对我们的信任。Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
2023-06-01 10:33:48
313
拓扑梅尔智慧办公平台(Topomel Box)是一款日常办公软件,主要面向经常使用电脑的朋友 它提供了各种提升办公效率的小功能
2023-02-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人