Listbox Rechtsklick



  • Guten Tag,

    ist es möglich in einer listbox den rechtsklick zu "aktivieren"?

    Also so dass dann ein kleines menü erscheint oder sowas?



  • Radio Eriwan: "Im Prinzip nein, aber ..."

    Listboxen dienen der Auflistung von irgendetwas und sehen keine Eingaben des Benutzers im Text vor. Du kannst aber den Stil LBS_NOTIFY einsetzen und dann dir z.B. eine Nachricht auf einen Doppelklick an das Parentfenster schicken lassen. Dort im Parentfenster liesse sich eine MessageBox oder mehr unterbringen.



  • GuttenTag schrieb:

    Guten Tag,

    ist es möglich in einer listbox den rechtsklick zu "aktivieren"?

    Also so dass dann ein kleines menü erscheint oder sowas?

    Ja, das geht. Einfach mit SetWindowLong der Listbox einen neuen Callback verpassen. Dieser kann dann auf den Rechtsklick reagieren.

    WNDPROC oldProc = (WNDPROC)SetWindowLong(
    		handle(),
    		GWL_WNDPROC, (LONG)EditorWindowProc
    	);
    

    mfg Martin



  • mgaeckler schrieb:

    Ja, das geht. Einfach mit SetWindowLong der Listbox einen neuen Callback verpassen. Dieser kann dann auf den Rechtsklick reagieren.

    Stimmt - geht wunderbar! 👍 Hängt eine subclass für die Listbox ein, die alles zu sehen bekommt, was sonst intern geregelt wird.
    Danke für diesen Tipp, das habe ich bisher nur für Edit-Controls verwendet.

    Für den gefragten Zweck kann ich mir aber andere Möglichkeiten besser vorstellen. Z.B. eine Titelzeile (static-control) mit einem rechts angehängten Button [...] direkt oberhalb der Listbox. Da sieht der Benutzer viel mehr, was er machen kann!



  • berniebutt schrieb:

    Für den gefragten Zweck kann ich mir aber andere Möglichkeiten besser vorstellen. Z.B. eine Titelzeile (static-control) mit einem rechts angehängten Button [...] direkt oberhalb der Listbox. Da sieht der Benutzer viel mehr, was er machen kann!

    Ein Kontextmenü ist nichts besonderes und erlaubt die Auswahl eines Objektes und Anzeige des dazugehörigen Menüs in einem Schritt. Daher sind kürzere Mauswege und weniger Klicks erforderlich.

    Aber vom Prinzip hast Du recht. Ein Kontextmenü sollte nicht der einzige Weg sein, ein bestimmtes Ziel zu erreichen, weil andere Methoden dem Benutzer unter Umständen früher anzeigen, was möglich ist. Nur muß man aufpassen, daß die Oberflächen nicht allzusehr überladen werden. Das überfordert auch ganz schnell manche Benutzer.

    Wir Softwareentwickler haben hier ein massives Problem: Für uns ist die Bedienung eines Rechners etwas völlig normales, wir wissen wie's geht, kennen auch die Hintergründe und können so sehr souverän mit Computern umgehen.

    Frag aber mal einen einfachen Arbeiter, oder andere Berufsgruppen, bei denen Rechner noch was besonderes sind. Ich hatte neulich eine Anwenderin (studierte Germanistin), die wußte noch nicht einmal, wie eine Datei gelöscht werden kann.

    Es kommt also immer auch darauf an, für welche Benutzergruppe eine Anwendung implementiert wurde.

    mfg Martin


  • Mod

    Für ein Kontextmenü sollte man niemals WM_RBUTTONDOWN verwenden, sondern immer WM_CONTEXTMENU netterweise wird diese nachricht auch an die Parents durchgerecht und man kann auch die Kontextmenütaste verwenden...



  • Ich denke mal, dass er eher ein Popup-Menü meint, und das mit einem Rechtsklick auf die Listbox öffnen möchte. Dies ist ziemlich einfach!



  • MichelM schrieb:

    Ich denke mal, dass er eher ein Popup-Menü meint, und das mit einem Rechtsklick auf die Listbox öffnen möchte.

    Das denkt Martin auch, deswegen hat er schließlich auf WM_CONTEXTMENU hingewiesen.

    Dies ist ziemlich einfach!

    Klar, zumindest wenn man Martins Ansatz verfolgt und auf den ganzen anderen Quark verzichtet.



  • Nee, ich meinte die Eigenschaft Popup-Menu, da ist das wirklich sehr einfach. Ein neues Popup-Menü mittels Komponente erstellen und dann mit der Listbox verbinden. Sehr einfach!

    Aber ich habe gerade jetzt erst gemerkt, dass wir hier im WinAPI-Forum sind (habe den Artikel über Google gefunden) sorry.


Anmelden zum Antworten