In vielen Programmen sehen Sie eine kurze Erklärung in der Statuszeile, wenn Sie mit dem Mauszeiger über einem Menüeintrag sind:

Das System stellt Ihnen dazu die Funktion
WM_MENUSELECT" aufrufen.
Wie der Name schon sagt, wird die Nachricht bei der Auswahl eines Menüeintrags ausgelöst. Der lParam enthält dabei das Handle des Menüs. Das niederwertige Word des wParam gibt das Menüitem oder den Submenü-Index an. Das höherwertige Word spezifiziert Menü-Flags, die ausgewertet werden können, beispielsweise MF_BITMAP, MF_GRAYED, usw.
Im Beispielprogramm wird so geprüft, ob der ausgewählte Menüeintrag ein Separator oder ein Popupmenü ist. In diesem Fall wird an die Statuszeile die Nachricht "SB_SIMPLE" gesendet, was sozusagen ein "Neuzeichnen" der Statuszeile zur Folge hat.
if(bool(HIWORD(wParam) and MF_POPUP)) or (bool(HIWORD(wParam) and MF_SEPARATOR)) or (HIWORD(wParam) = $FFFF) then SendMessage(hStatus,SB_SIMPLE,0,0)
Andernfalls rufen wir die schon genannte "MenuHelp"-Funktion auf, der wir die Nachricht, den wParam- und den lParam-Wert, sowie das Menü- und Statuszeilen-Handle und die Anwendungsinstanz übergeben müssen:
MenuHelp(uMsg,wParam,lParam,HMENU(lParam),hInstance, hStatus,@dummy);
Die Reihenfolge der Werte ist aus dieser Beispielzeile ja ersichtlich. Erwähnenswert ist noch der letzte Parameter. Laut Microsoft soll dieser Parameter ein Array sein, das paarweise die ID einer String-Ressource und eines Menü-Handles beinhaltet. Dieses Array soll dann nach dem Handle durchsucht werden, worauf (im Erfolgsfall, natürlich!) die Funktion den passenden String aus den Ressourcen des Programms lädt und in der Statuszeile anzeigt. So steht es zumindest im PSDK.
Nun ist die Variable "dummy" allerdings so deklariert:
var
dummy : uint = 0;
Das ist möglich, weil laut Definition der letzte Parameter ein Zeiger auf eine UINT-Variable ist. Und es sieht so aus, als würde der Wert dieser Variablen zum niederwertigen Wort von wParam addiert werden, um die gewünschte Ressourcen-ID zu bilden. Das lässt sich sogar nachprüfen, wenn Sie den Wert von "dummy" z.B. auf Eins ändern und das Beispiel ausprobieren. In dem Fall würde der erste Menüeintrag nun die Information des zweiten Eintrags anzeigen, und der letzte (Nr. 5) hätte überhaupt keine passende Ressource mehr.
Da unsere String-Ressourcen nun die selben IDs wie die Menüeinträge benutzen
STRINGTABLE DISCARDABLE
BEGIN
1 "Der erste Menüeintrag"
2 "Der zweite Menüeintrag"
3 "Der dritte Menüeintrag"
4 "Menüeintrag Nr. 4"
5 "Und natürlich - der fünfte Eintrag"
END
belassen wir den Wert von "dummy" auf Null, und alles ist in Butter ... :o)
Wenn Sie Ihr Menü z.B. mit dem Ressourcen-Editor des Visual Studio erstellen, haben Sie dort gleich die Möglichkeit, den passenden Text einzutragen. Dadurch wird automatisch die passende String-Ressource angelegt und gespeichert.