CListCtrl hinkt einen Tastendruck hinterher



  • Hallo,

    meine CListCtrl-Box läuft gut. Wenn ich auf eine Zeile klicke, wird OnClickFelder aufgerufen und dort wird dann auf den Zeilenwechsel reagiert (sobald man die Maus losläßt).

    void CX509HandlerDlg::OnKeydownFelder(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    	LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    
      CX509HandlerDlg::OnClickFelder(pNMHDR, pResult);
    
      *pResult = 0;
    }
    
    void CX509HandlerDlg::OnClickFelder(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    
      POSITION	pos = m_Felder.GetFirstSelectedItemPosition();
      int	        intIndex = m_Felder.GetNextSelectedItem(pos); 
    
      CString		cstrTmp,cstrTmp2;
      unsigned int	i,intStart;
      __int64		i64Tmp;
      char			strTmp[80];
    
      switch(intIndex)
      {
    	case 0:
              :
              :
    

    Wenn ich aber mit den Cursur-Tasten rauf und runter fahren will, passiert zunächst mal gar nichts. Deshalb habe ich OnKeydownFelder eingeführt, welches aufgerufen wird, falls eine Taste gedrückt wird. Die Funktion ruft dann ihrerseits OnClickFelder auf. Das tut's auch, aber die Aktualisierung hinkt hier immer einen Tastendruck hinterher! Die Selection wandert in eine neue Zeile (entsprechend der Taste) und sonst passiert erstmal nichts - erst beim nächsten Tastendruck wird dann auf den vorherigen reagiert!
    Wieso? Was kann ich tun?


  • Mod

    Deine Methode die Du verwendest ist nicht der richtige Weg. Du brauchst weder die Tasten abfangen noch die Maus Nachrichten!

    Du bekommst die Nachricht VN_ITEMCHANGED gesendet wenn immer sich etwas an dem List-Control ändert, d.h. auch der Selektions Stil.

    In der entsprechenden Struktur, die übergeben wird kannst Du erkennen ob das Item nun selektiert ist oder eben nicht.



  • Hallo MArtin,

    vielen Dank für den Hiweis! Werd' es gleich mal umbauen.

    Warum diese merkwürdige Verzögerung eintrirr, würd' ich dennoch gerne wissen.

    Schade, daß es keine vernünftige Doku gibt, die einem kurz und bündig einen Überblick alle Eigenschaften der diversen Dialoge bzw. Objekte gibt. Woher soll man sonst wissen, welches der richtig Weg ist...


  • Mod

    1. Die MSDN enthält alle Informationen, die Du brauchst. Ja man muss etwas lesen, aber das schadet nur der Dummheit 🙂
    2. Dein Code ist potentiell gefährlich. Du hst ein Key Down Event und rufst dann ein Click Event auf. Dir muss klar sein, dass jedes dieser Events eine eigene spezielle NMHDR Struktur. Du kannst also diese Events nicht weiterleiten!
    Fehlfunktionen würden mich also in keiner Weise wundern.


Anmelden zum Antworten