Ressourcendateiformate

In diesem Abschnitt wird das Format der binären Ressourcendatei beschrieben, die der Ressourcencompiler basierend auf dem Inhalt der Ressourcendefinitionsdatei erstellt. Diese Datei hat in der Regel die Erweiterung .res. Der Linker neu erstellt die RES-Datei in eine Ressourcenobjektdatei und verknüpft sie dann mit der ausführbaren Datei einer Anwendung.

Eine binäre Ressourcendatei besteht aus einer Reihe verketteter Ressourceneinträge. Jeder Eintrag besteht aus einem Ressourcenheader und den Daten für diese Ressource. Ein Ressourcenheader ist in der Datei DWORD ausgerichtet und besteht aus folgendem Code:

  • Ein DWORD, das die Größe des Ressourcenheaders enthält
  • Ein DWORD, das die Größe der Ressourcendaten enthält
  • Der Ressourcentyp
  • Der Ressourcenname
  • Zusätzliche Ressourceninformationen

Die RESOURCEHEADER-Struktur beschreibt das Format dieses Headers. Die Daten für die Ressource folgen dem Ressourcenheader und sind für jeden Ressourcentyp spezifisch. Einige Ressourcen verwenden auch eine ressourcenspezifische Gruppenheaderstruktur, um Informationen zu einer Gruppe von Ressourcen zur Verfügung zu stellen.

Zugriffstastentabellenressourcen

Eine Zugriffstastentabelle ist ein Ressourceneintrag in einer Ressourcendatei. Sie verfügt nicht über einen Gruppenheader. Eine ACCELTABLEENTRY-Struktur beschreibt jeden Eintrag in der Zugriffstastentabelle. Mehrere Zugriffstastentabellen sind zulässig.

Cursor- und Symbolressourcen

Das System behandelt jedes Symbol und jeden Cursor als einzelne Datei. Diese werden jedoch in RES-Dateien und ausführbaren Dateien als Gruppe von Symbolressourcen oder als Gruppe von Cursorressourcen gespeichert. Die Dateiformate von Symbol- und Cursorressourcen sind ähnlich. In der RES-Datei folgt ein Ressourcengruppenheader allen einzelnen Symbol- oder Cursorgruppenkomponenten.

Das Format der einzelnen Symbolkomponenten ähnelt dem Format der ICO-Datei. Jedes Symbolbild wird in einer BITMAPINFO-Struktur gespeichert, gefolgt von den farblich geräteunabhängigen Bitmapbits (DIB) der XOR-Maske des Symbols. Die monofarbigen DIB-Bits der AND-Maske des Symbols folgen den DIB-Farbbits.

Das Format jeder Cursorkomponente ähnelt dem Format der CUR-Datei. Jedes Cursorbild wird in einer BITMAPINFO-Struktur gespeichert, gefolgt von den monofarbigen DIB-Bits der XOR-Maske des Cursors und dann von den monotonen DIB-Bits der AND-Maske des Cursors. Beachten Sie, dass es einen Unterschied in den Bitmaps der beiden Ressourcen gibt: Im Gegensatz zu Symbolen weisen Cursor-XOR-Masken keine Farb-DIB-Bits auf. Obwohl die Bitmaps der Cursormasken monofarbig sind und keine DIB-Header oder Farbtabellen haben, befinden sich die Bits in Bezug auf Ausrichtung und Richtung weiterhin im DIB-Format. Ein weiterer signifikanter Unterschied zwischen Cursorn und Symbolen ist, dass Cursor einen Hotspot haben und Symbole dies nicht tun.

Der Gruppenheader für Symbol- und Cursorressourcen besteht aus einer NEWHEADER-Struktur sowie einer oder mehreren RESDIR-Strukturen. Es gibt eine RESDIR-Struktur für jedes Symbol oder jeden Cursor. Der Gruppenheader enthält die Informationen, die eine Anwendung benötigt, um das richtige Symbol oder den richtigen Cursor für die Anzeige auszuwählen. Sowohl der Gruppenkopf als auch die Daten, die für jedes Symbol oder jeden Cursor in der Gruppe wiederholt werden, haben eine feste Länge. Dadurch kann die Anwendung nach dem Zufallsprinzip auf die Informationen zugreifen.

Dialogfeldressourcen

Ein Dialogfeld ist auch ein Ressourceneintrag in der Ressourcendatei. Sie besteht aus einer DLGTEMPLATE-Dialogfeldheaderstruktur sowie einer DLGITEMTEMPLATE-Struktur für jedes Steuerelement im Dialogfeld. Die DLGTEMPLATEEX- und DLGITEMTEMPLATEEX-Strukturen beschreiben das Format erweiterter Dialogfeldressourcen.

Schriftarten Ressourcen

Schriftarten werden in der Ressourcendatei als Gruppe von Ressourcen gespeichert. Einzelne Schriftarten machen eine Schriftartgruppe aus. Eine FONT Statement-Ressourcendefinitions-Anweisung in der . Die RC-Datei definiert jede Schriftart. Jede einzelne Schriftart in der Ressource besteht aus dem vollständigen Inhalt der zugehörigen FNT-Datei. Eine FONTGROUPHDR-Struktur folgt allen einzelnen Schriftartkomponenten in der RES-Datei.

Schriftartressourcen werden den Ressourcen einer bestimmten Anwendung nicht hinzugefügt. Stattdessen werden sie normalerweise ausführbaren Dateien mit der Erweiterung .fon hinzugefügt. Bei diesen Dateien handelt es sich in der Regel nicht um Anwendungen, sondern um ressourcenbasierte DLLs.

Eine Menüressource besteht aus einer MENUHEADER-Struktur, gefolgt von einer oder mehreren NORMALMENUITEM- oder POPUPMENUITEM-Strukturen, eine für jedes Menüelement in der Menüvorlage. Die MENUEX _ TEMPLATE _ HEADER- und MENUEX TEMPLATE _ _ ITEM-Strukturen beschreiben das Format erweiterter Menüressourcen.

Nachrichtentabellenressourcen

Eine Meldungstabelle ist eine Ressource, die formatierten Text für die Anzeige als Fehlermeldung oder in einem Meldungsfeld enthält. Die Hauptstruktur in einer Nachrichtentabellenressource ist die MESSAGE _ RESOURCE _ DATA-Struktur.

Versionsressourcen

Die Hauptstruktur in einer Versionsressource ist die VS _ FIXEDFILEINFO-Struktur. Weitere Strukturen sind die VarFileInfo-Struktur zum Speichern von Sprachinformationsdaten und StringFileInfo für benutzerdefinierte Zeichenfolgeninformationen. Alle Zeichenfolgen in einer Versionsressource haben das Unicode-Format. Jeder Informationsblock wird an einer DWORD-Grenze ausgerichtet.