Mehrzeiliges ListView-Item

Das Problem scheint ganz einfach zu sein, aber ich bekomme es nicht hin!

Und zwar wollte ich eigentlich nur zu meinem Main-Menü noch ein Kontext-Menü für eine ListView basteln. Da ich aber lauter Speicherfehler durch ein eigenständiges Kontext-Menü hatte, habe ich mir gedacht es in das Main-Menü einzubauen und es dann im Main-Menü auszublenden! In der ListView kann ich es ja jetzt durch deinen Tip (Danke :)) anzeigen lassen. Jedoch im Hauptmenü nicht ausblenden, verstehst?

Da ich es ja jetzt nicht ausblenden kann (da es nicht möglich ist), muss ich ja jetzt mein Kontext-Menü als eigenständiges Menü "designen" (zusammenklicken auf der Form).

Und hier ist die Frage, wie ich auf dieses seperate Kontext-Menü zugreifen und es anzeigen lassen kann?

Beim Hauptmenü habe ich ja ein Pointer (CMenu*) von der Methode <CMenu* GetMenu()> bekommen, womit ich dann auf das Menü Zugriff hatte.

Da mein Kontextmenü aber nicht mein Hauptmenü ist, geht das ja nicht mit der Methode GetMenu()!

Man ist das kompliziert zu erklären.... aber das Problem ist ja glaub ich an sich ganz einfach, aber ich habe es bis jetzt einfach nicht hinbekommen!

Falls du immernoch Fragen haben solltest, frag nur, ich versuchs dann nochmal vielleicht anders zu beschreiben.


mfG

MAN
 
Da ich aber lauter Speicherfehler durch ein eigenständiges Kontext-Menü hatte, [...]
Also das Problem waren die Speicherfehler, die du hattest? Und alles andere ein Versuch, diese zu vermeiden? Wenn ich dich soweit richtig verstanden habe, solltest du versuchen, den Fehlern auf den Grund zu gehen. Vermutlich hast du mit deinem Kontextmenü irgendetwas alloziiert und nicht wieder freigegeben. Aber was könnte das sein...? *grübel*
Könnte es Folgendes sein:
Zu CMenu::LoadMenu() MSDN Lib: Before exiting, an application must free system resources associated with a menu if the menu is not assigned to a window. An application frees a menu by calling the DestroyMenu member function. Du musst das geladene Menü am Ende (oder vorher) auch wieder freigeben.
Bringt dich das weiter?
 
Joah... öhm... :) bin gerade zu Hause und muss es für die Arbeit machen. Kann bei der Sache nicht wirklich antworten, da ich das Programm nicht vor mir habe.

Aber zumindest weiß ich noch, dass es ein Fehler beim Initialisieren war, und nicht beim schließen des Programms.

Ich schreib morgen nochmal, wo genau das Problem liegt.

Schonmal Danke bis dahin!

Schönen Abend noch!


mfG

MAN
 
Sodala, hab mal nochmal bißchen nachgekuckt. Folgenden Code benutze ich:

mnuMain ist mein Hauptmenü
mnuContextMain soll mein Kontextmenü sein (wobei "ctrMnuContextMain" die ID von dem Kontextmenü ist)

Code:
mnuMain = GetMenu();                     // Hauptmenü
mnuFile = mnuMain->GetSubMenu( 0 );        // Untermenü: Datei
mnuView = mnuMain->GetSubMenu( 1 );        // Untermenü: Ansicht

mnuContextMain = ( CMenu* ) GetDlgItem( ctrMnuContextMain );     // Kontextmenü

mnuContextEdit = mnuContextMain->GetSubMenu( 0 );                // Hier bringt er schon den Speicherfehler, da ich ja
                                                                 // anscheinend die Methode GetSubMenu nicht auf
                                                                 // dieses initialisierte KontextMenü anwenden kann

Doch wie solle ich es dann sonst machen? Ich weiß echt nicht mehr weiter....


mfG

MAN
 
Du prüfst ja überhaupt nicht, was GetDlgItem() zurückgibt - wahrscheinlich NULL. Ich bin mir übrigens auch nicht sicher, ob man damit an Menüs kommen kann.
 
ok, hast recht - die methode GetDlgItem gibt NULL zurück... tja, aber wie soll ich es dann sonst anstellen?


mfG

MAN
 
Da ich nicht wusste, wie ich dir sonst helfen kann, habe ich eine minimales Dialoganwendung gebastelt, die fehlerfrei ein Popupmenü öffnet und auf die Auswahl von Menüpunkten reagiert. Es handelt sich um eine 0815-Dialoganwendung direkt vom Assistenten, an der ich nur folgende Änderungen gemacht habe:
- Ein Dummy-Menü ( IDR_MENU1) mit lustigen Menüpunkten ;)
- Handler in den Dialog: OnRButtonUp, OnHuhuWullewatz, OnHuhuSchnorch. Die letzten beiden Handler reagieren auf Menüpunkte.

Diese Vorgehensweise funktioniert nicht nur mit kleinen Dialoganwendungen, sondern auch mit richtig dicken MDI-Anwendungen. Sieh dir vielleicht die Sourcen an - vielleicht hilft dir das weiter.

Übrigens kehrt TrackPopupMenu() erst zurück, wenn der User eine Auswahl getroffen hat oder das Menü auf andere Weise geschlossen wurde (Escape).
 

Anhänge

  • popuptestdlg.zip
    21,9 KB · Aufrufe: 33
Zurück