为什么对话框创建后是隐藏状态的
一个细节,你值得知晓
即使你在对话框模板中指定了WS_VISIBLE,对话框在最初创建之后,也是隐藏状态。
如果你不仔细研究一番,你可能根本不会注意到这个细节。
这个行为,是历史原因。
让我们回到上古时代,我说的是Windows 1.0那会儿。
那个时候,显卡速度慢,CPU速度慢,内存速度也慢。你可以点击一个显示对话框的菜单,然后等待一两秒钟,以使该对话框从软盘中加载。(啥,软盘?是的,你没听错,在当时吧,硬盘驱动器适合比较有钱的孩子。)
然后,你就必须等待对话框绘制在屏幕上。为了节省宝贵的时间,对话框最初被创建时为隐藏状态,并且在对话框保持隐藏状态时会处理所有预先输入的内容。仅在完成预输入后,对话框才会最终显示出来。
如果当你以非常快的速度,输入全部的内容后并按回车键,你甚至都可以完成整个对话框过程而不需要显示它。嚯嚯,咱要的不就是效率嘛。
现如今,程序都存储在硬盘上了,你(通常)还不至于能淘汰硬盘驱动器,因此这种优化在很大程度上被浪费了,但是出于兼容性原因,这种行为仍然保持在Windows中。
实际上,这个行为在界面体验这方面,仍然有它的用武之地:如果最初创建的对话框是可见的,则用户将能够看到所有创建在对话框中的控件,并观察到WM_INITDIALOG可见运行(例如,更改默认值,隐藏和显示控件,移动控件位置等),这既不美观,也会分散用户的注意力。
用户可能会疑惑:”为什么对话框一开始选中了这个勾选框,然后在我单击它之前突然又取消选中了?”
总结
对话框创建后默认隐藏,如需显示,请调用ShowWindow,谢谢。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Why are dialog boxes initially created hidden?》
- 下一篇: 说一说默认的安全描述符
- 上一篇: 为什么对byte的操作会得到int的结果
相关推荐
- vcpkg更新及产品路线图
- Posted on 05月05日
- 向子进程传递大量数据的方法
- Posted on 08月23日
- 第 205 期:微软 Copilot 计划推出内存管理功能并支持谷歌云盘
- Posted on 09月18日
- 小技巧:在PHP中调用多条shell指令
- Posted on 06月24日



评论已关闭。