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.

3.1. Ressourcen-Skriptsprache            zurück  zum Inhaltsverzeichnis

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

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.

3.2. Wie kommt die Ressource-Datei zur Ausführbaren Datei?            zurück  zum Inhaltsverzeichnis

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.

3.3. Resourcen-Typen            zurück  zum Inhaltsverzeichnis

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()

Weiter mit Kapitel 4: Ein Menü            zum Inhaltsverzeichnis