Optionsmenü mittels WinAPI?
-
Hi,
ich würde gerne in einem Kontextmenü ein paar Menüeinträge in der Art eines Optionsmenüs haben. Ich denke ihr wisst was ich meine. Aber irgendwie finde ich nirgends Hinweise wie ich das bewerkstelligen kann? Dies mit Checkboxen zu realisieren ist relativ einfach, aber wie gesagt zu Optionsmenüs hab ich nix gefunden.
Wär super wenn mir da jemand weiter helfen könnte.
-
Arki schrieb:
Hi,
Ich denke ihr wisst was ich meine.Ganz ehrlich: Nein.
Hast du zufällig einen Screenshot von einem Menü, dass so aufgebaut ist wie du es meinst?
gruß
Martin
-
Er meint vermutlich checked Menuitems, die mit dem Hacken davor, lol
Wenn du das Menu in der Resource hast, dürfte das doch kein Thema sein, btw. im Reseditor entsprechende Art einstellen.
Wenn du mit InsertMenu() Items hinzufügst, welche eben als checkable Option gelten sollen, mußt du dort ensprechend MF_UNCHECKED/MF_CHECKED setzten um den Hacken rein und raus zu bekommen ^^
-
Nein, ich meine eben genau nicht die mit dem Haken (=Checkboxen), weil die sind relativ einfach. Ich meine eben die, die dann praktisch wie Radiobuttons im Menü sind.
Mittlerweile habe ich herausgefunden, dass ich wenn ich ein Menü von Hand erstelle, ich mittels InsertMenuItem ein Objekt von MENUITEM mitgeben kann, und in dieser Struktur kann man ein Flag setzen, dass das eben wie ein Radiobutton sein soll.Hier mal kurz der Code:
.... hPopupMenu = CreatePopupMenu(); // Menu anlegen InsertMenu (hPopupMenu, 0, MF_BYPOSITION | MF_CHECKED, 0, "Ein Item"); InsertMenu (hPopupMenu, 1, MF_SEPARATOR, 0, NULL); // Separator MENUITEMINFO info1, info2, info3; info1.fMask = MIIM_STATE | MIIM_FTYPE | MIIM_STRING; info1.fType = MFT_RADIOCHECK | MIIM_STRING; info1.hbmpChecked = NULL; info1.dwTypeData = "GroupItem1"; info1.cch = strlen(info1.dwTypeData); info2 = info3 = info1; InsertMenuItem(hPopupMenu, 2, MF_BYPOSITION, &info1); info2.dwTypeData = "GroupItem2"; info2.cch = strlen(info2.dwTypeData); InsertMenuItem(hPopupMenu, 3, MF_BYPOSITION, &info2); info3.dwTypeData = "GroupItem3"; info3.cch = strlen(info3.dwTypeData); InsertMenuItem(hPopupMenu, 4, MF_BYPOSITION, &info3); ...Das Problem ist, dass wenn ich es so mache, ich nur den Eintrag oberhalb des Separators ("Ein Item") zu sehen bekomme. Die anderen nicht...
-
Hat keiner eine Idee wie das gehen könnte?
-
@Arki
Hättest du die Rückgabe von InsertMenuItem mal überprüft, wäre dir klar geworden, dass hier ein Fehler auftritt. Bei Abfrage mit GetLastError bekommst du hier "Falscher Parameter".
Fehler liegt/liegen in den Werten der MENUITEMINFO Struktur.
1. Setzen der Größe der Struktur cbSize nicht angegeben
2. Fehler bei fType - hier gehört nicht MIIM_STRING rein. Wenn, dann MFT_STRING und dafür wird ab Win98 MIIM_STRING bei fMask angegeben.MENUITEMINFO info1, info2, info3; ZeroMemory(&info1, sizeof(MENUITEMINFO)); info1.cbSize = sizeof(MENUITEMINFO); info1.fMask = MIIM_STATE | MIIM_FTYPE | MIIM_STRING; info1.fType = MFT_RADIOCHECK; info1.dwTypeData = "GroupItem1"; info1.cch = strlen(info1.dwTypeData); info2 = info3 = info1; info1.fState = MFS_CHECKED; info2.fState = MFS_UNCHECKED; info3.fState = MFS_UNCHECKED;
-
Ok, vielen Dank. Hat mir sehr geholfen