本部分介绍资源编译器基于资源定义文件的内容创建的二进制资源文件的格式。 此文件通常具有 .res 扩展名。 链接器将 .res 文件重新格式化为资源对象文件,然后将其链接到应用程序的可执行文件。
二进制资源文件由多个串联的资源条目组成。 每个条目都包含一个资源标头和该资源的数据。 资源标头在文件中 DWORD对齐,由以下内容组成:
- 包含资源标头大小的 DWORD
- 包含资源数据大小的 DWORD
- 资源类型
- 资源名称
- 其他资源信息
RESOURCEHEADER 结构描述此标头的格式。 资源的数据遵循资源标头,特定于每种资源类型。 某些资源还采用特定于资源的组标头结构来提供有关一组资源的信息。
Accelerator 表资源
快捷键表是资源文件中的一个资源条目。 它没有组标头。 ACCELTABLEENTRY结构描述了加速器表中的每个条目。 允许多个加速器表。
游标和图标资源
系统将每个图标和光标作为单个文件进行处理。 但是,这些资源以一组 RT_GROUP_ICON 图标资源或一组 RT_GROUP_CURSOR 游标资源的形式存储在 .res 文件和可执行文件中。 图标和游标资源的文件格式类似。 在 .res 文件中,资源组标头遵循所有单个图标或游标组组件。
图标和游标资源的组标头由一个 NEWHEADER 结构以及一个或多个 RESDIR 结构组成。 每个图标或光标都有一个 RESDIR 结构。 组标头包含应用程序需要选择要显示的正确图标或光标的信息。 组标头和数据对组中每个图标或光标重复的数据都具有固定长度。 这样,应用程序就可以随机访问信息。
每个 RT_ICON 图标或 RT_CURSOR 游标资源组件的格式与.ico/.cur文件的格式非常相似。 每个图像都存储在 BITMAPINFO 结构中,后跟图标 XOR 掩码的颜色与设备无关的位图(DIB)。 和 掩码的单色 DIB 位遵循颜色 DIB 位。 游标和图标之间的显著区别在于,游标具有 LOCALHEADER 结构,其中插入了位图数据之前的热点,而图标则不。
由于 Windows Vista RT_ICON 图标或 RT_CURSOR 游标资源可能包含 PNG 压缩的图像数据。
对话框资源
对话框也是资源文件中的一个资源条目。 它由一个 DLGTEMPLATE 对话框标头结构以及一个 DLGITEMTEMPLATE 结构组成,用于对话框中每个控件。 DLGTEMPLATEEX 和 DLGITEMTEMPLATEEX 结构描述扩展对话框资源的格式。
字体资源
字体作为一组资源存储在资源文件中。 单个字体构成字体组。 FONT 语句 资源定义语句。RC 文件定义每个字体。 资源中的每个单独字体都包含相关.fnt文件的完整内容。 FONTGROUPHDR 结构遵循 .res 文件中的所有单个字体组件。
字体资源不会添加到特定应用程序的资源中。 相反,它们通常添加到扩展名为 .fon 的可执行文件。 这些文件通常是仅限资源的 DLL,而不是应用程序。
菜单资源
菜单资源 包含一个 MENUHEADER 结构,后跟一 个或多个 NORMALMENUITEM 或 POPUPMENUITEM 结构,一个用于菜单模板中的每个菜单项。 MENUEX_TEMPLATE_HEADER 和 MENUEX_TEMPLATE_ITEM 结构描述扩展菜单资源的格式。
消息表资源
消息表 是一个资源,其中包含格式的文本,以错误消息或消息框中显示。 消息表资源中的主结构是 MESSAGE_RESOURCE_DATA 结构。
版本资源
版本资源中的主结构是 VS_FIXEDFILEINFO 结构。 其他结构包括用于存储语言信息数据的 VarFileInfo 结构,以及用于用户定义的字符串信息的 StringFileInfo。 版本资源中的所有字符串都采用 Unicode 格式。 每个信息块在 DWORD 边界上对齐。