ERLEDIGT
NEIN
NEIN
ANTWORTEN
19
19
ZUGRIFFE
2876
2876
EMPFEHLEN
-
Hallo,
gibt es eine Möglichkeit, ein ListView-Item mehrzeilig zu gestalten?
Und noch eine andere Frage: wie bekomme ich in einem Control (Bsp.: ListView) ein Context-Menu eingebaut?
Habe es mal mit SetMenu( CMenu* ) probiert, aber kein Ergebnis bekommen (bei Rechtsklick passierte nichts!). Muss ich es mit einer Methode (OnClick o. ä.) abfragen, und dann das Menü öffnen lassen?
mfG
MAN
-
30.03.04 10:07 #2
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Das musst du selber machen. Per Ownerdraw vermutlich. Man könnte auch für die Items einzelne CWnds einblenden, aber das ist eine knifflige Sache.gibt es eine Möglichkeit, ein ListView-Item mehrzeilig zu gestalten?
Stichwort: CMenu::TrackPopupMenu. Ich habe allerdings im Moment da kein Beispiel zu. Da muss ich mal in meinen Sourcen wühlen. Vielleicht siehst du schon mal in der MSDN Lib nach, bis ich was gefunden habe.Und noch eine andere Frage: wie bekomme ich in einem Control (Bsp.: ListView) ein Context-Menu eingebaut?
----
Habe was. CG_IDR_POPUP ist eine normale Menüressource. Die Auswahl der Menüpunkte bekommst du als ganz normale Windowsereignisse.
Code :1 2 3 4 5 6 7 8 9 10 11 12
CMenu menu; VERIFY(menu.LoadMenu(CG_IDR_POPUP)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); // das sieht mir nach Hack aus - kann mich nicht mehr erinnern, // warum es nötig war, das Toplevel-Parent zu bekommen: CWnd* pWndPopupOwner = this; while (pWndPopupOwner->GetStyle() & WS_CHILD) pWndPopupOwner = pWndPopupOwner->GetParent(); pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWndPopupOwner);
Geändert von Kachelator (01.04.04 um 00:24 Uhr)
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Vielen Dank für die Mühe!
Funktioniert super!
Wäre nur noch die Frage wo du <point> herbekommst? Bestimmt aus irgendeiner Funktion GetMousePosition, oder so. Aber wie genau?
mfG
MAN
P.S.: Das mit den ListView-Items werde ich mir dann nochmal anschauen.Geändert von MAN (30.03.04 um 10:57 Uhr)
-
30.03.04 11:05 #4
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Möglich wäre ::GetCursorPos(), aber ich hatte es in irgendwelchen Messagehandlern verwendet, wo die Position ohnehin übergeben wurde.Wäre nur noch die Frage wo du <point> herbekommst? Bestimmt aus irgendeiner Funktion GetMousePosition, oder so. Aber wie genau?Geändert von Kachelator (30.03.04 um 13:19 Uhr)
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Na wunderbar

Genauso wollte ichs haben!
Vielen Dank nochmals!
mfG
MAN
-
Ach ja, da hätte ich noch eine Frage: wie blendet man ein Menu-Item aus?
Beispielsweise habe ich die 3 Hauptmenü-Items "Datei", "Bearbeiten" und "Ansicht", und möchte das Menü "Bearbeiten" ausblenden, also per Pseudocode:
Hätte jemand eine Idee?Code :1
MenuItem( ID_MNU_EDIT )->SetVisibleState( false ); :)
mfG
MAN
-
30.03.04 17:12 #7
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Das schon probiert?
BOOL CMenu::ModifyMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );
Keine Ahnung, ob es damit geht.Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Ja, ausprobiert schon, aber es gibt kein zutreffendes Flag! Da gibts nur DISABLED und GRAYED, mit dene es leider nicht funktioniert. Die restlichen sind irrelevant.
Wollte es mit ->ShowWindow( false ) probieren, aber die Methode wird anscheinend nicht von CMenu unterstützt...
Sonst noch Vorschläge, Tips, Hinweise?
mfG
MANGeändert von MAN (30.03.04 um 17:34 Uhr)
-
30.03.04 19:36 #9
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Klar, ein Item ist da auch kein eigenes Window.Wollte es mit ->ShowWindow( false ) probieren, aber die Methode wird anscheinend nicht von CMenu unterstützt...
Nee, ausser entweder zwei verschiedenen Menüs nach Bedarf verwenden oder das Item nach Bedarf von Hand einfügen und löschen.Sonst noch Vorschläge, Tips, Hinweise?
Ich denke aber, es zu disablen reicht auch aus, oder?Geändert von Kachelator (31.03.04 um 22:21 Uhr)
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Hm... ehrlichgesagt hatte ich die dumme Idee, das Kontext-Menü in das Hauptmenü einzubauen, und eben dann nur einen dieser Menüpunkte als Kontext-Menü anzuzeigen, und diesen in dem Hauptmenü eben zu verstecken.
Ich hatte das so gemacht, weil ich es einfach nicht geschafft hatte, mit einem seperaten Kontext-Menü es anzuzeigen.
Da ich beim Initialisieren die Methode GetMenu() benutze, und von da aus dann durch GetSubMenu die Untermenüs ableite, ging das nicht mit einem seperaten Menü...
Jetzt ist es die Frage: wie stelle ich es mit einem seperaten Menü an?
mfG
MAN
-
31.03.04 20:34 #11
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Ehrlich gesagt verstehe ich dein Problem nicht ganz. Kannst du mir das genauer erklären?
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
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
-
31.03.04 21:46 #13
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
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*Da ich aber lauter Speicherfehler durch ein eigenständiges Kontext-Menü hatte, [...]
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?Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
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 :1 2 3 4 5 6 7 8 9
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
Ähnliche Themen
-
ListView Item auslesen?
Von Olimar/Chris im Forum .NET Windows FormsAntworten: 1Letzter Beitrag: 19.03.10, 21:04 -
ListView - Selected Item
Von SG_wXistenZ im Forum .NET ArchivAntworten: 1Letzter Beitrag: 15.03.05, 09:24 -
Item in einem Listview selectieren -> Ereignis?
Von colblake im Forum VisualStudio & MFCAntworten: 2Letzter Beitrag: 06.10.04, 07:37 -
Mehrzeiliges Textfeld
Von Kiramusu im Forum PHPAntworten: 3Letzter Beitrag: 28.09.03, 18:41 -
mehrzeiliges Emailscript?
Von dezign im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 26.10.01, 07:56





Zitieren
Login






