Nachricht von CListCtrl bei Wechsel der Auswahl



  • Hallo Forum,
    In einem Control (CListCtrl) werd der Inhalt einer Datenbank angezeigt.

    In diesem Feld kann sich der User sowohl ueber die Pfeiltasten als auch ueber Buttons rauf und runter bewegen. Gibt es die Moeglichkeit, beim Wechsel der Auswahl in diesem Listenfeld eine Nachricht abzufangen und eine Funktion aufzurufen? Oder muss ich fuer alle Nachrichten NM_CLICK usw. extra eine Funktion aufrufen? Und wenn ja, wie fange ich es dann ab, wenn jemand mit den Pfeiltasten navigiert?

    Das zweite Problem betrifft diese Zeile:

    m_MainList.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);

    zwar wird hier die erste Zeile beim Start ausgewaehlt und markiert, aber ich muss immer zweimal mit der Pfeil Taste klicken, damit sich dich Auswahl nach unten bewegt. Danach geht es denn reibungslos. Weiss jemand wieso?

    Gruesse und Dank 🤡
    items

    Ach so:
    FAQ und Google habe ich rauf und runter gewaelzt (allerdings erfolglos) und bei den Nachrichten im Klassenassistenten habe ich eigentlich jetzt fast alle Nachrichten bezueglich des Listenfeldes durchprobiert. War aber leider nix dabei. Muesste doch irgendeine Nachricht geben, die eine veraenderte Auswahl abfängt. Oder zumindest faende ich das logisch.



  • Zu 1.
    Soviel ich weiß, müßtest Du das über LVN_ODSTATECHANGED abfangen können.

    Zu 2.
    Hast Du mal versucht, den ItemState gleichzeitig auf Focussed zu setzen?



  • 1. versuch, LVN_ITEMCHANGED abzufangen
    2. SetItemState(GetSelectionMark(),LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED)



  • Hi,
    SetItemState(GetSelectionMark(),LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED) funzt 🤡.

    Ich hatte zwar schon versucht, den Focus zu setzen, aber habe statt 'LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED'
    'LVIS_SELECTED,LVIS_SELECTED|LVIS_FOCUSED'
    geschrieben. Damit ging nix.

    Was leider gar nicht funzt, ist allerdings dass Abfangen der Nachricht. Weder LVN_ODSTATECHANGED noch LVN_ITEMCHANGED bringen den gewuenschten Erfolg.
    Deshalb habe ich es mit LVN_KEYDOWN gemacht, wenn sich der User mit den Pfeiltasten durch das Listenfeld bewegt. Das Problem ist dabei aber, dass ja das ausgewaehlte Item sich erst aendert, wenn die Pfeiltaste losgelassen wird. Das heisst fuer die Pfeil runter Taste kann man das selektierte Item mit +1 auslesen. Aber bei der Pfeil rauf Taste ists damit natuerlich Essig, weil ich ja nicht weiss, welche Taste gedrueckt wurde :o(. Kann man das vielleicht auslesen und diesen Wert dann mit an eine Funktion uebergeben?

    Gruesse und Dank fuer die Hilfe
    items



  • Sorry,
    ich Doedel habe erst gefragt und dann gesucht. Das Problem mit den liess sich schnell klaeren ueber:
    if(KEY_DOWN(VK_DOWN)...

    Ist jetzt (fast) alles allerfeinst.

    Dank
    items


Log in to reply