Um zu verstehen, warum man in C einen Standard eingeführt hat bedarf es ein wenig mehr der Geschichte zu dieser Sprache.C C++ C/C++ Programmieren C Kurs Programmierung Systemprogrammierung Win32 api Win-Api Windows Systemprogrammierung C Programmierung Win32 api Win-Api Windows Systemprogrammierung Kapitel 3: Resourcen
Es gibt wohl kaum noch ein Programm, welches diese Datei(en) nicht verwendet. Die Rede ist von den Resourcen-Dateien. Diese Resourcen werden in einer einfachen Skriptsprache erstellt und nehmen Ihnen eine Menge Arbeit ab. Da-mit können Sie Dinge wie Menüs, Dialogfelder, Symbole, Bitmaps und auch wiederum andere Resourcen-Daten erstellen. Mit Resourcen legen Sie im Allgemeinen das Erscheinungsbild einer Anwendung fest.
Soll bspw. das Programm mit verschiedensten Sprachen entwickelt werden, können Sie dies mithilfe von Resourchen-Dateien vereinfachen. Denn anstatt den kompletten Quellcode zu ändern, müssen Sie nur die Sprache der Resourcen-Datei ändern. Außerdem sind Resourcen sehr effizient, da diese nur dann in den Speicher geladen werden, wenn diese von der Anwendung auch benötigt werden.
Keine Sorge, Sie müssen nicht erst noch eine Skriptsprache erlernen, um Resourcen-Skripte zu erstellen, da die Syntax recht einfach ist. Am besten, ich zeige es Ihnen anhand einer solchen Resourcen-Datei.
#include <windows.h> #include "resource.h" ///////////////////////////////////////////////////////////////// // // Menü // IDR_MENU1 MENU BEGIN POPUP "Datei" BEGIN MENUITEM "Öffnen", ID_FILE_OPEN MENUITEM "Speichern", ID_FILE_SAVE MENUITEM "Ende", ID_FILE_EXIT END POPUP "Optionen" BEGIN POPUP "Optionen" BEGIN MENUITEM "Option&1", ID_OPTIONS_OPTIONS_OPTION1 MENUITEM "Option&2", ID_OPTIONS_OPTIONS_OPTION2 END END MENUITEM "Über", ID_ABOUT END ///////////////////////////////////////////////////////////////// // //Icon // ID_ICON ICON "goofy.ico"
In dieser Resource-Datei wurde das Hauptmenü einer Anwendung und das Icon definiert. Zu Beginn geben Sie folgende Headerdateien an:
#include <windows.h> #include "resource.h"
In der Headerdatei resource.h sind die Werte für die symbolischen Konstanten wie IDR_MENU1, ID_ICON, ID_FILE_OPEN, ID_FILE_SAVE, ID_FILE_EXIT, ID_OPTIONS_OP, ID_OPTIONS_OP, ID_ABOUT deklariert. Dann leiten Sie den Beginn des Hauptmenüs ein:
IDR_MENU1 MENU
Dies können Sie sich wie bei der Definition einer Funktion vorstellen. IDR_MENU1 ist ein Integerwert, den Sie in der Headerdatei resource.h deklariert haben. MENU ist die Resource, die Sie auf den nächsten Zeilen definieren. Weiter geht es mit:
BEGIN
Die Ressource MENU wird hiermit eingeleitet.
POPUP "Datei" BEGIN MENUITEM "Öffnen", ID_FILE_OPEN MENUITEM "Speichern", ID_FILE_SAVE MENUITEM "Ende", ID_FILE_EXIT END
Hiermit definieren Sie ein Popup-Menü mit dem Titel "Datei". Was sich in diesem Popup-Menü befindet geben Sie jetzt zwischen BEGIN und END ein. Wir haben hier drei Elemente (MENUITEM) Namens "Öffnen", "Speichern" und "Ende". Die Syntax der Zeile sieht wie folgt aus:
Ressource Namen, Idenfikationsnummer
Genauso läuft diese mit dem nächsten Menü ab.
POPUP "Optionen" BEGIN POPUP "Optionen" BEGIN MENUITEM "Option&1", ID_OPTIONS_OPTIONS_OPTION1 MENUITEM "Option&2", ID_OPTIONS_OPTIONS_OPTION2 END END
Nur wird hierbei das Popup-Menü nochmals in ein Popup-Menü gepackt. Dies sieht in der Praxis folgendermaßen aus:
Ein Menü mit einer Ressourcen-Skripte-Datei erstellt
Am Ende der Resourcen-Skriptdatei finden Sie nochmals ein einzelnes Menüelement "Über". In der nächsten Zeile wird die Definition von MENU mit END geschlossen.
In der letzten Zeilen haben Sie mit
ID_ICON ICON "goofy.ico"
noch ein Icon mit dem Namen "goofy.ico" definiert. Diese Resource-Skriptdatei müssen Sie jetzt mit der Endung *.rc abspeichern.
Resourcen-Dateien werden von einem Resourcencompiler (RC.EXE) übersetzt. Dieser Compiler erzeugt aus der *.rc-Datei eine *.RES-Datei. Nach dem Verbinden der *.exe-Datei (ausführbare Datei) wird die *.RES Datei an das Ende gebunden.
Hinweis |
|
Wie Sie ein Resource-Datei in der Praxis zu einem Projekt hinzufügen, variiert von Compiler zu Compiler und von Anwender zu Anwender. Aber irgendwo in der Entwicklungsumgebung findet sich immer eine Option wie "Zum Projekt hinzufügen/Ressource-Datei" oder "NEU/RESOURCE-DATEI". Ich habe alle diese Beispiele mit der kostenlosen Entwicklungsumgebung des Bloodshed-Dev-C++ getestet. Den Compilern von Mircrosoft und Borland sind in Regel eigene Programme für solche Zwecke beigelegt. |
Tipp |
|
Einen kostenlosen Resourcen-Editor finden Sie mit Weditres, welcher der Entwicklungsumgebung VIDE beigelegt ist. Der Resourcen-Editor lässt aber auch ohne dem kompletten Packet alleine herunterladen. |
Bevor Sie die Resourcen-Skriptedatei in der Praxis einsetzen, folgt hierzu noch ein Überblick zu den Resourcen-Typen und den WIN32-Funktionen, womit Sie diese Resourcen im Programm laden können.
Aufgeteilt werden die Resourcen-Typen in Einzeilige und Mehrzeilige. Im Beispiel ist z.B. ICON ein einzeiliger Resourcen-Skriptetyp und MENU ein Mehrzeiliger. Schließlich wird mit einer Angabe von MENU alleine noch lange kein Menü angezeigt.
Hierzu eine Tabelle zu den fünf einzeiligen Resource-Typen und deren WIN32-Funktion, womit Sie diese Resource im Programm aus der Resource-Datei laden können.
Ressource-Skripttyp | Funktion zum Laden des Typs |
BITMAP | LoadBitmap() |
CURSOR | LoadCursor() |
ICON | LoadIcon() |
FONT | AddFontResource() |
MESSAGETABLE | FormatMessage() |
Jetzt auch noch ein Überblick, zu den fünf mehrzeiligen Resource-Typen und den Funktionen zum laden dieser Resource:
Resource-Skripttyp | Funktion zum Laden des Typs |
ACCELERATORS | LoadAccelerators() |
DIALOG | |
MENU | LoadMenu() |
RCDATA | FindResourceEX(), LoadResource() |
STRINGTABLE | LoadString() |