Mehrzeiliges ListView-Item

MAN

Erfahrenes Mitglied
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
 
gibt es eine Möglichkeit, ein ListView-Item mehrzeilig zu gestalten?
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.

Und noch eine andere Frage: wie bekomme ich in einem Control (Bsp.: ListView) ein Context-Menu eingebaut?
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.
----
Habe was. CG_IDR_POPUP ist eine normale Menüressource. Die Auswahl der Menüpunkte bekommst du als ganz normale Windowsereignisse.
Code:
	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);
 
Zuletzt bearbeitet:
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.
 
Zuletzt bearbeitet:
Wäre nur noch die Frage wo du <point> herbekommst? Bestimmt aus irgendeiner Funktion GetMousePosition, oder so. Aber wie genau?

Möglich wäre ::GetCursorPos(), aber ich hatte es in irgendwelchen Messagehandlern verwendet, wo die Position ohnehin übergeben wurde.
 
Zuletzt bearbeitet:
Menü-Item ausblenden

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:
Code:
 MenuItem( ID_MNU_EDIT )->SetVisibleState( false );     :)
Hätte jemand eine Idee?


mfG

MAN
 
Das schon probiert?
BOOL CMenu::ModifyMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );
Keine Ahnung, ob es damit geht.
 
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

MAN
 
Zuletzt bearbeitet:
Wollte es mit ->ShowWindow( false ) probieren, aber die Methode wird anscheinend nicht von CMenu unterstützt...
Klar, ein Item ist da auch kein eigenes Window.

Sonst noch Vorschläge, Tips, Hinweise?
Nee, ausser entweder zwei verschiedenen Menüs nach Bedarf verwenden oder das Item nach Bedarf von Hand einfügen und löschen.

Ich denke aber, es zu disablen reicht auch aus, oder?
 
Zuletzt bearbeitet:
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
 

Neue Beiträge

Zurück