首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

对话框模板简史-32位扩展模板

总算到了我真正想说的主题了,32位扩展对话框模板,它在资源文件中以DIALOGEX来声明。

下图展示了对话框模板的历史变迁:

一点儿也不特别,对吧?

好吧,让我们继续研究。32位扩展对话框是16位扩展对话框模板的32位版本,所以接下来的内容和之前的文章会看起来十分的熟悉。

首先是头部,下图展示了一个32位扩展对话框资源的头部:

前面两个字段和16位扩展版本一样:它们指明了这个对话框模板是一个扩展的对话框模板。

接下来的两个字段是新增加的。帮助标识符通过SetWindowContextHelpId被挂接到对话框上,然后是扩展对话框的风格,这对于你来说,应该一点也不会意外吧?

接下来,你懂的:3个字符串指示了菜单名称,类名称和对话框标题。因为这是一个32位的模板,所以所有字符串都是Unicode格式的。

从16位扩展版本开始,可选的自定义字体信息包含了更加丰富的信息:

和之前一样,字体大小,重量,斜体和字符集都可以传入到API函数CreateFont中。

头部之后,就是对话框控件模板,每个控件模板必须对齐到DWORD边界。

带来的改变是:

> 新的dwHelpID和dwExStyle字段。

> 移除了dwStyle字段。

> 控件ID被扩展到了32位类型。

并不是将控件ID扩展为32位值会有帮助,因为WM_COMMAND和类似消息仍使用16位值来传递控件ID。 因此,实际上,你不能使用大于16位的值。 (好吧,假设你拥有控件的窗口句柄,则始终可以忽略控件ID字段,并通过GetDlgCtrlID函数检索完整的32位控件ID。)

下图是模板资源的一份内存转储:

首先是头部,如下:

根据前面描述的规则,解析如下:

接下来是菜单名称,类名称及对话框标题:

因为设置了DS_SETFONT风格,接下来是字体信息。请注意,对于扩展版本的对话框,字体信息中包含了一些额外的信息,如下图所示:

接下来是对话框控件的模板,请注意,它们必须在DWORD边界上对齐。

你可能已经猜到了这个实例对话框是查找替换的对话框。这是有一点区别需要注意,它使用了关键字DIALOGEX,而不是DIALOG。

DIALOGEX 36, 44, 230, 94

总结

至此,我们已经将所有的对话框模板格式都讲解了一遍,你学会了吗?

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。

本文来自:《The evolution of dialog templates – 32-bit Extended Templates》

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210417A03PK200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券