Menüs aus der Ressource laden


Nun muss man das Menü natürlich nicht erst beim Start des Programms "zusammenbauen". Man kann das Menü auch aus der Ressource des Programms zu laden. Dazu benötigen wir zuerst einen Ressourcen-Editor, der die Gestaltung von Menüs erlaubt. Beim Thema Dialoge gehen wir etwas ausführlicher auf den Visual Studio-Editor von Microsoft ein, deshalb sei hier nur gesagt, dass ich eben diesen Editor für das Menü benutzt habe:



Im Quelltext des Ressourcen-Skriptes sieht unser Menü dann so aus:

// Menu
200 MENU DISCARDABLE
BEGIN
    POPUP "Menü 1"
    BEGIN
        MENUITEM "Item 1",                      1
        MENUITEM "Item 2",                      2
        MENUITEM "Item 3",                      3
    END
    POPUP "Menü &2"
    BEGIN
        MENUITEM "Item 4",                      4
        MENUITEM "Item 5",                      5
    END
END

Dieses Skript wandeln wir mit einem Ressourcen-Compiler, wie "brcc32" von Borland, in eine Ressourcendatei um und binden sie in unser Programm ein. Um das Menü nutzen zu können, benötigen wir den API-Befehl LoadMenu, der als Parameter neben der Programminstanz auch die ID der Menüressource erwartet:

hMenu := LoadMenu(hInstance,MAKEINTRESOURCE(200));

Es gibt zwei Varianten zum Laden. Zum einen können wir das Menü im "WM_CREATE"-Teil der Nachrichtenfunktion laden lassen, müssen es dann aber noch an das Fenster "übergeben". Das passiert wie gehabt mit "SetMenu".
Als zweite Möglichkeit können wir den Befehl "LoadMenu" als Parameter von "CreateWindowEx" angeben:

CreateWindowEx(0, ClassName, AppName, WS_CAPTION or WS_VISIBLE or WS_SYSMENU
  or WS_MINIMIZEBOX or WS_MAXIMIZEBOX or WS_SIZEBOX, CW_USEDEFAULT,
  CW_USEDEFAULT, WindowWidth, WindowHeight, 0,
  LoadMenu(hInstance,MAKEINTRESOURCE(200)), // <-- Menü laden
  hInstance, nil);