首页

对话框模板简史-16位经典模板  

在Windows的历史中,有四个版本的对话框模板。尽管进行了更改,但你会发现它们基本上都是相同的。 第一个版本是Windows 1.0中的经典的对话框模板,它的开始部分类似于下图: 请注意,在早期的16位的Windows中,有一个限制:每个对话框最多只能有255个控件,因为记录对话框控件数量的类型被定义为一个字节。 这个头部定义之后,接下来时一串字符串。在16位的对话框模板中,所有的字符串允许使...

对话框模板简史-介绍

一个新的系列:对话框模板 在Windows的历史上,曾经出现过四种不同版本的对话框模板。尽管经历过这些历史变迁,如果你回过头来看,它们基本上都是差不多的。在这个系列中,我将尝试去解答很多人都会碰到的问题:”我正在以代码的方式生成对话框模板,但是看起来没有如预期那样工作起来,我是不是做错了什么?”。 实际上,通过资源编译器(RC.exe)就大概可以知道你在哪个工序做错了。 具...

小技巧GET: 如何验证系统文件的数字签名  

如果你想知道系统上的文件是否被非法篡改,这里我介绍给大家一个小工具:sigverif。 具体的操作方法如下 1) 打开电脑的开始,运行窗口。 2) 输入sigverif并回车,即可。 这个小工具打开后,点击开始按钮,会呈现下图的画面: 随后,小工具会开始对系统文件的数字签名进行扫描,这可能会花点时间,你可以在它扫描的时间里去干点什么别的事情。 扫描完成之后,如果系统文件的数字签名都验证成功,则表...

关于WinMain函数的第二个参数解释

请牢记:hPrevInstance始终为空 当一个GUI应用程序开始运行时,控制流会从WinMain函数开始。它的第二个参数,hPrevInstance,在Win32应用程序中永远为0。这个参数有什么特殊之处吗? 当然有。 在早期的16位Windows时代,曾经有一个名叫GetInstanceData的API函数。这个函数有一个HINSTANCE参数,一个指针,一个长度参数,以及一块用于拷贝实例到...

说说实例句柄和模块句柄的区别  

蝎子 在今天的时代,它们两者已经是同一个东西了,但是在过去的一段时间里,它们确实指代不同的东西。这个过去的时间,实际是远古时期的16位Windows时代。那个时候,一个模块(module)表示一个从磁盘加载到内存的文件,而模块句柄(HMODULE)则表示指向文件内存数据结构的句柄,这个数据结构表达了文件的存放位置,已经被加载到了内存的哪个位置(如果有的话)。 另一方面,一个实例(instance)...

浅谈区域窗口带来的性能开销  

敢情这项链暗中标注了价格啊 区域窗口看起来非常漂亮优雅,但是也会带来一定的性能开销,并且你可以清楚地看到性能开销给用户体验带来的影响。 举个例子,如果你一直不断地修改窗口区域,则性能开销会十分明显,因为CPU会一直忙于生成新的区域。 一个关于内部性能的问题会凸显区域窗口所隐含的性能开销:窗口矩形的假设逻辑。 假设,你有一个大型窗口,但是设置了一个很小的窗口区域。和另外一个带有很小窗口区域的小窗口相...

小技巧:快速添加项目到列表控件  

值得拥有的小技巧一枚 如果你准备添加大量的项目到一个列表框(ListBox)或者组合下拉框(ComboBox),则我这里有一些你可能会需要的优化方法来显著地改进性能。(注意,这个技巧仅在你添加大量项目的时候才起作用。当然,从用户体验上来说,一个带有几百个项目的列表设计本身就值得考虑,但是我还是假设你确实有一些这样做的理由。) 首先,你可以在添加项目之前,禁用重绘。(实际上,这个方法适用于所有控件。...

为什么你经常会看到1033命名的文件夹?

有一个读者问了这样一个问题 我老是在想:为什么Microsoft公司的软件产品安装目录下,经常会看到一些数字命名的文件夹呢,例如”1033″这样的。它具体代表什么意思呢? 我想,这位读者很有可能来自美国,因为1033是”英语(美国)”的语言标识,它本身是10机制,转为对应的16进制是0x0409。所以,你可能还会看到一些以0404命名的文件夹。 有一...

一个线程何时才能收到Window消息?

你(可能)不知道的 和Windows消息系统打过交道的人都会知道:GetMessage和PeekMessage这两个API会从窗口的消息队列中检索消息,这些消息时由DispatchMessage分发到窗口的。 大部分人也知道:GetMessage和PeekMessage也会自己分发不进入消息队列的消息。(所有挂起的非队列消息将会被分发,然后只有第一个进入队列的消息会被返回) 但是大多数人不知道的是...

小技巧:一种简单的判断文件权限的方法  

有这么一个简单需求 有时候,你可能希望判断是否对文件或者文件夹有某种权限,但是又不想实际操作,只是简单的判断而已。举个例子,你可能向快速地知道是否对某个文件夹是否有删除里面文件的权限。 一种方法是:获取该对象的ACL,然后检查是否当前用户拥有希望的权限。有一个API AccessCheck可以做这件事情,调用起来也比较简单。 这个时候,可能你会想:”等会,系统里应该有一个完整的安全组件...