[MFC] ClistCtrl: Zeile färben und wieder "entfärben"



  • Guten Tag miteinander,

    mich plagt seit Stunden wieder ein Problem. Und zwar habe ich eine Suchfunktion für meine CListCtrl erstellt. Diese färbt mir den Text der zutreffenden Zeilen blau ein. Dies geschieht über folgenden Code:

    m_Buchliste.SetItemState(i, LVIS_FOCUSED, LVIS_FOCUSED);
    m_Buchliste.SetTextColor(RGB(0,0,255));
    

    Nun bekomm ich diese Färbung bei einer erneuten Suche aber nicht wieder weg. Prinzipiell war mein Ansatz, die komplette Liste zu durchlaufen und jede Zeile wieder schwarz zu färben. Folgender Code sollte dies umsetzen.

    for(int k=0;k<m_Buchliste.GetItemCount();k++)
    {
    m_Buchliste.SetItemState(k, LVIS_FOCUSED, LVIS_FOCUSED);
    m_Buchliste.SetTextColor(RGB(0,0,0));
    m_Buchliste.SetItemState(k, 0, LVIS_FOCUSED);
    }
    

    Jedoch funktionert es nicht. Aus mir komplett unergreiflichen Gründen wird, sobald ich die obige Schleife einbaue (die vor der eigentlichen Suchschleife durchläuft), jede Zeile, ob sie der Suchanfrage entspricht oder nicht, blau gefärbt. Ich scheine die SetItemState Funktion komplett nicht zu verstehen, und ich weiss nicht warum.
    Ohne die Schleife werden nur die eigentlichen Suchtreffer markiert wie es sein sollte. Jedoch sollten diese bei einer anderen Suche natürlich wieder schwarz gefärbt werden. an heres my problem 😞

    Nochmal kurz: habe ich die for-Schleife, die mir eigentlich jede Zeile schwarz färben sollte, eingebunden, werden mir, sofern es mindestens ein Suchergebnis gibt, alle Einträge blau gefärbt. Habe ich die for-Schleife auskommentiert, werden nur die Zeilen blau gefärbt, die den Suchkriterien entsprechen. Ich kapiers komplett nicht. Die obige for-Schleife hat mit der Schleife, in der jeder Eintrag mit dem Suchwort verglichen wird, absolut nix am Hut.

    Gruß Sebastian

    Ich hoffe ihr könnt mir wieder einmal helfen.

    Gruß Sebastian


  • Mod

    So kann das nicht funktionieren. Du hast nicht verstanden wie die meisten MS-Controls funktionieren. Eine Zeile hat keinen Spciher über den Zustand seiner Farbe.
    Verwende Customdraw, was mit Sicherheit der einfachste Ansatz ist.

    Siehe dazu:
    http://codeguru.earthweb.com/cpp/controls/listview/customdrawing/article.php/c4195/
    http://codeguru.earthweb.com/cpp/controls/listview/customdrawing/article.php/c4199/


Anmelden zum Antworten