PopUp Menu aus Resourece laden und TrayIcon

03/06/2008 - 13:57 von Thomas Steinbach | Report spam
Hallo NG,

ich habe in mein Programm ein TrayIcon
mit PopUp-Menue hinzugekloeppelt.

Das ganze funktioniert gut wenn ich das PopUp
mit:

snip
POINT lpClick;

hPopMenu = CreatePopupMenu();
InsertMenu(hPopMenu, i++, MF_BYPOSITION|MF_STRING, IDM_NID_ABOUT, "&About");
InsertMenu(hPopMenu, i++, MF_BYPOSITION|MF_SEPARATOR, 0, NULL);
InsertMenu(hPopMenu, i++, MF_BYPOSITION|MF_STRING, IDM_NID_EXIT, "&Exit");
SetForegroundWindow(hDlg);
TrackPopupMenu(hPopMenu, TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_BOTTOMALIGN,
lpClick.x, lpClick.y, 0, hDlg, NULL);
PostMessage(hDlg, WM_NULL, 0, 0);
snap

erstelle. vgl.: http://www.geocities.com/technofund...NIcon.html
Aber wenn ich das PopUp-Menue aus einer Resource mit:

snip
hPopMenu = LoadMenu(hInstGlob, MAKEINTRESOURCE(IDC_MENU_POPUP));

IDC_MENU_POPUP MENU
BEGIN
MENUITEM "&About", IDM_NID_ABOUT
MENUITEM SEPARATOR
MENUITEM "E&xit", IDM_NID_EXIT
END
snap

lade, dann funktioniert dies zwar, wenn man weiss an welcher
Stelle der Eintrag, den man aktivieren will, auftaucht, aber es
ist keine Beschriftung der Eintraege zu sehen und das PopUp
ist nur ca. 2mm schmal... Geht das so nicht bei PopUps?
Warum nicht, bzw. wie kann man es doch aus einer Resource
laden?

btw: Ist der Workaround fuer einen MS Bug mit:

SetForegroundWindow(hDlg);
TrackPopupMenu(...);
PostMessage(hDlg, WM_NULL, 0, 0);

nur bei TrackPopupMenu(...) oder auch bei
TrackPopupMenuEx(...) notwendig.

Wo finde ich mal eine deutschsprachige Beschreibung von
diesem Bug? Mit den eglischen Beschreibungen habe ich mir
im Verstaendnis schwer getan...

Thomas
 

Lesen sie die antworten

#1 Stefan Reuther
03/06/2008 - 20:06 | Warnen spam
Thomas Steinbach wrote:
Aber wenn ich das PopUp-Menue aus einer Resource mit:

snip
hPopMenu = LoadMenu(hInstGlob, MAKEINTRESOURCE(IDC_MENU_POPUP));

IDC_MENU_POPUP MENU
BEGIN
MENUITEM "&About", IDM_NID_ABOUT
MENUITEM SEPARATOR
MENUITEM "E&xit", IDM_NID_EXIT
END
snap

lade, dann funktioniert dies zwar, wenn man weiss an welcher
Stelle der Eintrag, den man aktivieren will, auftaucht, aber es
ist keine Beschriftung der Eintraege zu sehen und das PopUp
ist nur ca. 2mm schmal... Geht das so nicht bei PopUps?



Soweit ich weiß darf das Popup-Menü kein "top-level"-Menü sein, sondern
muss ein Untermenü sein. Also
hMenu = LoadMenu();
hPopMenu = GetSubMenu(hMenu, 0);
und in der Ressourcendatei ebenfalls eine Ebene mehr.


Stefan

Ähnliche fragen