The RESOURCEHEADER structure contains information about the resource header itself and the data specific to this resource. This structure is not a true C-language structure, because it contains variable-length members. This structure was created solely to depict data organization in the resource file and does not appear in any of the header files shipped with the Microsoft Platform Software Development Kit (SDK).
struct RESOURCEHEADER { DWORD DataSize; DWORD HeaderSize; [Ordinal or name TYPE]; [Ordinal or name NAME]; DWORD DataVersion; WORD MemoryFlags; WORD LanguageId; DWORD Version; DWORD Characteristics; };
If the TYPE member is a numeric value, it can specify either a standard or a user-defined resource type. If the member is a string, then it is a user-defined resource type.
Following are the standard Windows resource types.
Resource Type Name |
Type number |
RT_CURSOR |
1 |
RT_BITMAP |
2 |
RT_ICON |
3 |
RT_MENU |
4 |
RT_DIALOG |
5 |
RT_STRING |
6 |
RT_FONTDIR |
7 |
RT_FONT |
8 |
RT_ACCELERATOR |
9 |
RT_RCDATA |
10 |
RT_MESSAGETABLE |
11 |
RT_GROUP_CURSOR |
12 |
RT_GROUP_ICON |
14 |
RT_VERSION |
16 |
RT_DLGINCLUDE |
17 |
RT_PLUGPLAY |
19 |
RT_VXD |
20 |
RT_ANICURSOR |
21 |
RT_ANIICON |
22 |
Values less than 256 are reserved for system use.
You do not need to add padding for DWORD alignment between the TYPE
and NAME members because they contain WORD data. However, you
may need to add a WORD of padding after the NAME member to align
the rest of the header on DWORD boundaries.
Flag description |
Value |
MOVEABLE |
0x0010 |
FIXED |
~MOVEABLE |
PURE |
0x0020 |
IMPURE |
~PURE |
PRELOAD |
0x0040 |
LOADONCALL |
~PRELOAD |
DISCARDABLE |
0x1000 |
The only attribute a Win32-based application uses is the DISCARDABLE attribute. The remaining attributes are permitted in the script for compatibility with existing scripts, but they are ignored.
The resource compiler for Windows NT always ignores the MOVEABLE, IMPURE, and
PRELOAD attribute flags. See Resource-Definition
Statements for additional information about resource attributes.
Each resource includes a language identifier so the system or application can
select a language appropriate for the current locale of the system. If there
are multiple resources of the same type and name that differ only in the
language of the strings within the resources, you will need to specify a LanguageId
for each one.
A variable type member is called a Name or Ordinal member, and it is used in most places in the resource file where an identifier appears. The first WORD of a Name or Ordinal type member indicates whether the member is a numeric value or a string. If the first WORD in the member is equal to the value 0xffff, which is an invalid Unicode character, then the following WORD is a type number. Otherwise, the member contains a Unicode string and the first WORD in the member is the first character in the name string. For additional information about resource definition statements see Single-Line Statements and Multiline Statements.
CHARACTERISTICS Statement, LANGUAGE Statement, VERSION Statement