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

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

接下来,我们再来讲讲扩展对话框,或者说”DIALOGEX”。首先,我们来看看16位版本的扩展对话框。

16位的扩展对话框模板有悠久的历史了。唯一支持它的操作系统只有Windows 95/98/Me系列。为了延伸到我们即将讲述的32位扩展对话框主题,这里也简单的对它做一些讲解。

基本上来说,扩展版本的对话框和它的非扩展版本一样。只是,扩展版本的对话框的头部有一些不同,如下图所示:

前两个字段指定了一个版本号(到目前为止,只有版本号1被扩展对话框使用过),然后接着是一个签名数值0xFFFF,以区分非扩展版本的对话框模板。

接下来是两个新的字段。它们作为32位的帮助标识符,可以使用GetWindowContextHelpId获取这个标识符,你应该看到相关的扩展对话框风格。

和之前一样,接下来是字符串。首先是菜单名称,然后是类名称,对话框标题,所有的字符串的编码方式和对应的非扩展版本一致。

如果DS_SETFONT风格被设置,则接下来是一个自定义字体的声明。这个时候的字体声明和之前有点不一样了。在经典模板中,你需要使用一个WORD来指定字体大小和一个字符串来指定字体名称。但是在扩展版本的模板中,字体信息会更加丰富,如下图所示:

新增加了字体粗细,字符集和字体是否为斜体的声明。

头部之后,是对话框控件的模板,每个控件模板类似如下图:

这里使用了经典版本的模板并添加了如下的新内容:

> 新的dwHelpID和dwExStyle字段。

> dwStyle 字段被移除。

> 控件ID被扩展到DWORD类型。

> cbExtra被扩展到WORD类型。

请注意,扩展控件ID到32位类型在16位Windows中已经完成大部分,但是实际没有什么作用。

接下来,我们来看看字符串资源的二进制表示:

首先是模板头部:

解析如下:

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

这个和16位版本一样。

声明中的DS_SETFONT表明后面定义了字体信息,如下图所示:

后面是其他所有的对话框控件,我就不一一展开介绍了。

以上对话框你已经看到过两次了,只是这次有个地方不一样:其中的DIALOG关键字变成了DIALOGEX。

DIALOGEX 36, 44, 230, 94

明天,我们会继续讲讲32位版本的扩展对话框模板,请拭目以待。

总结

16位扩展对话框虽然成为了历史,但是它的兄弟32位扩展对话框,在它的基础上发扬光大。

所以,它还是有一定的历史贡献的。

最后

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

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

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券