Ereignis wird mehrfach abgefangen
-
Ich hoffe, jemand kann mir erklären, was bei mir falsch läuft oder warum es so ist: Ich habe eine CListCtrl, wo ich die einzelnen Items anwählen kann. Dies soll mit der Maus oder den Cursortasten gemacht werden können. Nun macht mir das mit den Cursortasten Mühe, denn egal ob ich es mit LVN_ITEMACTIVATE oder LVN_ITEMCHANGED versuche, die Methode wird total dreimal aufgerufen.
Mein Code:
ON_NOTIFY(LVN_ITEMCHANGED, IDC_FILE_LIST, OnItemChanged) void CXFT_File::OnItemChanged(NMHDR *pNMHDR, LRESULT *pResult) { //Hier fange ich den Event ab }
Vielen Dank für eure Hilfe
-
An dem von Dir geposteten Code liegt es auf KEINEN Fall!
-
Nun, das ist schon mal gut zu wissen, dass es nicht so sein sollte. Ich habe mal sämtliche Methoden mit Haltepunkten ausgestattet, doch es ist wirklich so, dass es dreimal hintereinander ohne Umwege in die oben beschriebene Methode hineingeht.
Ich nehme auch gerne einen Schuss ins blaue in Kauf, oder sonst muss ich es mit dem Key-Event lösen, dieser kommt nur einmal
-
Die Nachrichten schlagen mehrfach auf, weil mehrere Items ihren Zustand ändern. Eines verliert den Selected-State, eines erhält ihn usw. Für jede Änderung bekommst du eine Nachricht.
Für LVN_ITEMCHANGED kannst du das so filtern:
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if( pNMListView->uNewState & LVIS_SELECTED ) { // Behandeln.. }
-
Bedeutet das, dass ein Event ausgelöst wird, wenn ein Element den Fokus verliert, der nächste, wenn das zweite Element den Fokus bekommt, und der dritte? Hmmm....
Naja, jedenfalls, mit diesem Filter klappt es zumindest.
Vielen Dank!
-
Ich hab's nochmal geprüft: Bei LVN_ITEMCHANGED bekommst du folgende Nachrichten:
- Item "alt" verliert 'Selected'-Zustand
- Item "alt" verliert 'Focused'-Zustand
- Item "neu" erhält 'Selected'- und 'Focused'-Zustand
-
Hey du bist gut. Dann habe ich ja heute bereits etwas gelernt, womit sich der Tag schon gelohnt hat
Vielen Dank!