Problem mit dynamischen Menu
-
Hallo Leute,
ich habe versucht, ein dynamisches Menu nach der Anleitung in der FAQ zu erstellen, was auch ganz gut geklappt hat. Probleme gibt es nur, wenn ich versuche, auf die dynamisch erstellten Menupunkte zu reagieren. Dann stürzt das Pargramm ab, da mein verwendetes struct leer (
) ist, obwohl ich es mit new erstellt habe. Gefüllt wird es beim erstellen des Menus auch, weshalb ich das nicht verstehe. Wo kann der Fehler liegen?
-
Ist der Pointer (in der FAQ "Musikordner") denn ausserhalb der Funktion vorhanden oder legst du den lokal an?
-
Ich habe den Pointer in der Header deklariert und in der Funktion mit new erstellt, in der er gefüllt wird. Ich greife in einer anderen Funktion aber wieder auf ihn zurück und dann ist er leer.
-
Die ensprechenden Codestellen wären hilfreich!
-
the_alien schrieb:
Die ensprechenden Codestellen wären hilfreich!
Alles klar!
Das struct sieht folgendermaßen aus:
struct DYNMENUITEMS { int nID; CString sContent; CString sDisplayed; };
Hinzu kommt der Zeiger:
DYNMENUITEMS* DynItems;
Beides seht in der Headerdatei meiner Klasse.
Das menu baut sich so auf:
if (m_xmldoc.Load(sFileName)) { //datei wird geladen count = 0; DynItems = new DYNMENUITEMS[500]; m_id = 48000; BuildMenu(menu, m_xmldoc.GetRootElement()); }
Das ist der relevante Inhalt von BuildMenu():
if (pChild->m_ChildElements.GetCount()==0) { menu->InsertMenu(0, MF_STRING | MF_ENABLED | MF_BYPOSITION, m_id, sItem); m_items.Add(sItem); DynItems[count].nID = m_id; DynItems[count].sContent = sItem; DynItems[count].sDisplayed = sItem; m_id++; count++; } else { CMenu* submenu = new CMenu; submenu->CreatePopupMenu(); menu->InsertMenu(0,MF_POPUP| MF_ENABLED | MF_BYPOSITION,(UINT)submenu->m_hMenu, sItem); BuildMenu(submenu, pChild); }
Klickt der Benutzer nun auf ein Menuitem, dann wird folgeder Code ausgelößt:
for(int i = -1; DynItems[i].nID != id; i++); //search 4 id CString sContent = DynItems[i].sContent; CString sDisplayed = DynItems[i].sDisplayed; return sContent;
EDIT: Ach ja, die IDs werden anhand von ON_COMMAND_RANGE in der Message Map von MainFrm aussortiert.
-
Wie heisst die genaue fehlermeldung ?
Und was sagt der Debugger ?Devil
-
Es gibt keine Felermeldung. Es erscheint halt dieses Feld von Microsoft, dass ein Fehler festgestellt wurde usw. Beim Debugger kam, wie gesagt, herraus, dass die structs bei zweiten Aufruf leer sind, aber beim erstellen des Menus eben doch gefüllt werden.
-
Sieht da wirklich niemand einen Fehler??? Bin für alle Hinweise dankbar.
-
Ehrlich gesagt seh ich keinen
-
Falls es jemanden interessiert: Das Problem lag daran, das der Pointer verloren ging, als das Programm in die MainFrame zurückgesprungen ist. Habe also das struct weitergereicht und beim Abfragen der Werte erneut übergeben. Ich habe also vorher praktisch immer auf ein neu erstelltes struct zugegriffen. Aber jetzt klappt ja alles