Listbox und Strg+A



  • Hallo, ich habe die folgende Frage:

    In Windows gibt es ja die gängige Tastenkombination "Strg+a" um alle Elemente einer Listbox, eines Ordners etc. auszuwählen. Gibt es eine Möglichkeit dies für eine Mehrfachauswahl-Listbox in meinem Programm durchzuführen?

    Oder muss ich gucken ob der Focus sich in der Listbox befindet und mit PreTranslateMessage die Nachricht abfangen, ob diese Tastenkombination gedrückt wurde? 😕



  • Musst du "per hand" machen 😉
    Allerdings ist das mit PreTranslateMessage käse, kannst doch ganz einach über die OnChar der ListBox machen.



  • Ok danke, aber wie kann ich nun diese OnChar-Funktion aufrufen bzw. definieren. Für ein Dialogfenster kann man diese Windows-Nachricht ja hinzufügen, für eine Listbox funktioniert das anscheinend nicht über den Ressourcen-Editor? 😕



  • // MyListBox.h
    class CMyListBox : public  CListBox {
    protected:
    	DECLARE_MESSAGE_MAP()
    public:
    	afx_msg void OnChar( UINT nChar, UINT nRepCnt, UINT nFlags );
    };
    
    // MyListBox.cpp
    afx_msg void CMyListBox::OnChar( UINT nChar, UINT nRepCnt, UINT nFlags )
    {
       // checke welche tasten gerückt wurden und mach was
    }
    
    BEGIN_MESSAGE_MAP(CMyListBox, CListBox)
    	//{{AFX_MSG_MAP(CMyListBox)
    	ON_WM_CHAR()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    

    so sollte es eigentlich hinhauen 🤡



  • Ok danke! 🙂

    Hab jetzt eine Listboxklasse nach deinen Vorgaben erstellt. Die Nachricht, dass die Tastenkombination gedrückt wird, kommt auch an.

    Nun hab ich noch 1 Frage:

    Ich kann mit SelItemRange(TRUE, 0, GetCount()); bzw. for (int i=0; i<=GetCount(); i++) SetSel(i, TRUE);
    alle Listboxeinträge auswählen. Warum wird in diesem Fall aber nicht die OnSelchange-Funktion aufgerufen. Wenn man per Mausklick einen String auswählt funktioniert es tadellos? Das Problem ist, meine verschiedenen Listboxen liegen auf jeweils einer Seite eines CPropertyPage. Nun werden die Werte in ein Array eingelesen. Das passiert, aber erst wenn ich noch mal einen Eintrag auswähle...es sollte aber sofort passieren!


Anmelden zum Antworten