Das Menü erzeugen


Dieses Tutorial erklärt das Erzeugen und den Einsatz eines Menüs durch API-Aufrufe.

Um ein Hauptmenü zu erzeugen, benutzen wir zuerst die Funktion "CreateMenu". Der Rückgabewert dieser Funktion wäre dann das Handle unseres Menüs, dem wir mit "AppendMenu" Einträge zuordnen können. Das bezieht sich allerdings nur auf die Menüleiste unterhalb der Titelzeile, etwa mit Items wie "Datei", "Bearbeiten" usw.

hMenu := CreateMenu;

Um auch diese Einträge mit Leben zu füllen, benötigen wir ein Untermenü, das wir mit der Funktion "CreatePopupMenu" erzeugen. Auch hier erhalten wir ein Handle zurück, so dass wir wieder mit "AppendMenu" die eigentlichen Einträge anhängen können:

hSubMenu := CreatePopupMenu;
{ Menüs mit Einträgen füllen } AppendMenu(hSubMenu, MF_STRING, IDM_ITEM1, 'Item&1'); AppendMenu(hSubMenu, MF_STRING, IDM_ITEM2, 'Item&2'); AppendMenu(hSubMenu, MF_SEPARATOR, 0, nil); AppendMenu(hSubMenu, MF_STRING, IDM_ITEM3, 'Item&3');

Das so erstellte Untermenü wird dann dem Hauptmenü zugeordnet, so das letztlich die gewünschte Struktur entsteht:

AppendMenu(hMenu, MF_STRING or MF_POPUP, hSubMenu, 'Menü&1');

Und natürlich müssen wir das Menü an das Fenster übergeben, damit wir es auch sehen:

SetMenu(hWnd, hMenu);


Genaue Informationen zu den Funktionen entnehmen Sie bitte dem MSDN oder der Hilfe. Ich will nur kurz auf ein paar Stilattribute eingehen, die aber ebenfalls in den Hilfen erklärt werden:

Wert Bedeutung
MF_CHECKED, MF_UNCHECKED Setzt oder entfernt den Haken vor einem Menüeintrag.
MF_SEPARATOR Dieser Eintrag bezeichnet einen Trennstrich. Als nächste ID kann Null, und als Menütext nil angegeben werden, da dieser Eintrag in der Fensterfunktion nicht abgefragt wird.
MF_DISABLED, MF_GRAYED Beide Attribute deaktivieren den Menüeintrag, aber nur der zweite stellt ihn auch grau dar.
MF_ENABLED Aktiviert einen Menüeintrag wieder.
MF_POPUP Anstelle der Item-ID wird hier das Handle des Untermenüs angegeben.