Benutzerdefinierte Listbox



  • Hallo,
    mein Problem ist folgendes :

    Programmiert hab ich mit Visual c++.
    Ich will eine Listbox um einige funktionen erweitern, dazu habe ich vor die Klasse Listbox eine andere gestellt die mir diese funktionen erweitert.

    Diese Listbox kann nun die Farbe der Einträge ändern und wählt automatisch den Listeneinrag aus wenn der Mauszeiger darüber ist.
    (CColorlistbox von www.codeguru.com/Cpp/controls/listbox/colorlistboxes/article.php/c1611/ )

    Meine Erweiterung :

    class CColListBox : public CListBox
    {
    //{{AFX_MSG(CColListBox)
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    //}}AFX_MSG
    }

    void CColListBox::OnMouseMove(UINT nFlags, CPoint point)
    {
    int a, b;
    b = point.y / 13; // Indexberechnung
    a = this->SetCurSel(b);
    CWnd::OnMouseMove(nFlags, point);
    }

    In meinem Hauptprogramm sind immer 3 Listboxen nebeneinander

    Listbox Listbox Listbox

    Problem 1:
    Ändert sich nun die Auswahl einer ListBox so sollen bei den anderen auch
    die entsprechenden Einträge je nach Index Ausgewählt werden.

    Ich habe es mit dem Ereignis OnSelChange() versucht, doch leider reagiert
    dieses Ereignis nur dann wenn man explizit einen neuen Eintrag mit der Maus anklicke.

    void CTalent1::OnSelChangeEbeWi()
    {
    int a = m_ctleBE_Wi.GetCurSel();
    m_ctlTaW_Wi.SetCurSel(a);
    m_ctlPreis_Wi.SetCurSel(a);
    }

    Die Funktion SetCurSel wählt wohl nur Optisch einen neuen Eintrag aus und das Ereignis OnSelChange bekommt davon nichts mit 😕

    Kann mir jemand helfen dies zu Realisieren ?

    Problem 2:
    Ich hätte gerne auch noch ein Ereignis von den Listboxen ob eine und
    welche Maustaste gedrückt wurde.

    Hat jemand eine Ahnung wie man einer Listbox ein Ereignis hinzufügt ?
    Es stehen ja nur 6 Ereignisse zur verfügung.
    LBN_SELCHANGE
    LBN_DBLCLK
    LBN_ERRSPACE
    ...

    Ich bräuchte sowas wie LBN_RBUTONDOWN und LBN_LBUTONDOWN
    Die Funktion WM_RBUTONDOWN gibts ja auch aber funktioniert leider nur im Hauptdialog

    Danke schonmal für die Hilfe 🤡


Anmelden zum Antworten