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. The structure definition provided here is for explanation only; it is not present in any standard header file.
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 Win32 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 |
RT_HTML | 23 |
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 |
Win32-based applications do not use any of these attributes. The attributes are permitted in the script for backward compatibility with existing scripts, but they are ignored. Win32 resources are loaded when the corresponding module is loaded, and are freed when the module is unloaded.
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 Resource-Definition Statements.
Windows NT: Requires version 3.1 or later.
Windows: Requires Windows 95 or later.
Windows CE: Unsupported.
Resources Overview, Resource Structures, CHARACTERISTICS Statement, LANGUAGE Statement, VERSION Statement