资源文件格式

本部分介绍资源编译器基于资源定义文件的内容创建的二进制资源文件的格式。 此文件通常具有 .res 扩展名。 链接器将 .res 文件重新格式化为资源对象文件,然后将其链接到应用程序的可执行文件。

二进制资源文件由多个串联的资源条目组成。 每个条目都包含一个资源标头和该资源的数据。 资源标头在 文件中与 DWORD 对齐,由以下内容组成:

  • 包含资源标头大小的 DWORD
  • 包含资源数据大小的 DWORD
  • 资源类型
  • 资源名称
  • 其他资源信息

RESOURCEHEADER 结构描述此标头的格式。 资源的数据遵循资源标头,特定于每种类型的资源。 某些资源还采用特定于资源的组标头结构来提供有关一组资源的信息。

快捷键表资源

快捷键表是资源文件中的一个资源条目。 它没有组标头。 ACCELTABLEENTRY 结构描述加速器表中的每个条目。 允许使用多个快捷键表。

游标和图标资源

系统将每个图标和光标作为单个文件进行处理。 但是,这些资源作为一组 RT_GROUP_ICON 图标资源或 RT_GROUP_CURSOR 组游标资源存储在 .res 文件中和可执行文件中。 图标和游标资源的文件格式相似。 在 .res 文件中,资源组标头遵循所有单独的图标或游标组组件。

图标和游标资源的组标头由 NEWHEADER 结构以及一个或多个 RESDIR 结构组成。 每个图标或光标都有一个 RESDIR 结构。 组标头包含应用程序选择要显示的正确图标或光标所需的信息。 组标头和针对组中每个图标或光标重复的数据都具有固定的长度。 这允许应用程序随机访问信息。

每个 RT_ICON 图标或 RT_CURSOR 游标资源组件的格式都与 .ico/.cur 文件的格式非常相似。 每个图像都存储在 BITMAPINFO 结构中,后跟与颜色设备无关的位图 (DIB) 位图标的 XOR 掩码。 AND 掩码的单色 DIB 位遵循颜色 DIB 位。 游标和图标之间的显著区别在于,游标具有 LOCALHEADER 结构,在位图数据之前插入了热点,而图标则没有。

由于 Windows Vista RT_ICON 图标或 RT_CURSOR 游标资源可能包含 PNG 压缩的图像数据。

对话框资源

对话框也是资源文件中的一个资源条目。 它由一个 DLGTEMPLATE 对话框标头结构以及对话框中每个控件的 一个 DLGITEMTEMPLATE 结构组成。 DLGTEMPLATEEXDLGITEMTEMPLATEEX 结构描述了扩展对话框资源的格式。

字体资源

字体作为一组资源存储在资源文件中。 单个字体构成一个字体组。 中的 FONT 语句资源定义语句。RC 文件定义每个字体。 资源中的每个单独字体都包含相关 .fnt 文件的完整内容。 FONTGROUPHDR 结构遵循 .res 文件中所有单独的字体组件。

字体资源不会添加到特定应用程序的资源中。 相反,它们通常添加到扩展名为 .fon 的可执行文件。 这些文件通常是仅限资源的 DLL,而不是应用程序。

菜单资源一个 MENUHEADER 结构组成,后跟一个或多个 NORMALMENUITEMPOPUPMENUITEM 结构,一个结构用于菜单模板中的每个菜单项。 MENUEX_TEMPLATE_HEADERMENUEX_TEMPLATE_ITEM结构描述了扩展菜单资源的格式。

消息表资源

消息表是一种资源,其中包含要显示为错误消息或消息框中的格式文本。 消息表资源中的main结构是MESSAGE_RESOURCE_DATA结构。

版本资源

版本资源中的main结构是VS_FIXEDFILEINFO结构。 其他结构包括用于存储语言信息数据的 VarFileInfo 结构,以及用于用户定义的字符串信息的 StringFileInfo 。 版本资源中的所有字符串都采用 Unicode 格式。 每个信息块在 DWORD 边界上对齐。