Schriftfarbe einer ListBox ändern



  • Hallo zusammen,

    gibt es eine Möglichkeit die Schriftfarbe für bestimmte Einträge einer Listbox zu ändern?



  • ja aber ist nicht grade die leichteste, ich selbst habe das mal so gelöst:

    case WM_DRAWITEM:
            {
    
                DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT*)lParam;
                if( dis->hwndItem == hStatusList ) // Prüfen welche Listbox gezeichnet wird
                {  
                    COLORREF bgColor;
    
                    char buf[100];
                    SendMessage(hStatusList,LB_GETTEXT,dis->itemID,(long)buf);
                    string listitems;
                    string rest;
    
                    // Falls Eintrag selektiert dann blauer Hintergrund, sonst schwarz
                    if( dis->itemState & ODS_SELECTED )
                    {
                        bgColor = RGB(0,0,90);
                        SetBkColor(dis->hDC,RGB(0,0,90));
                        SetTextColor(dis->hDC,RGB(244,244,255));
                        listitems = buf;
                        rest = listitems.substr(9,listitems.length());
                    }
                    else
                    {
    
                        listitems = buf;
                        string wertRGB = listitems.substr(0,3);
                        int colorred = atoi(wertRGB.c_str());
                        wertRGB = listitems.substr(3,3);
                        int colorgreen = atoi(wertRGB.c_str());
                        wertRGB = listitems.substr(6,3);
                        int colorblue = atoi(wertRGB.c_str());
                        SetTextColor(dis->hDC,RGB(colorred,colorgreen,colorblue));
                        bgColor = RGB(0,0,0);
                        rest = listitems.substr(9,listitems.length()-9);
    
                        SetBkColor(dis->hDC,bgColor);
    
                    }               
                    // Rechteck für Hintergrund zeichnen
                    HBRUSH hbr = CreateSolidBrush(bgColor);
                    FillRect(dis->hDC,&dis->rcItem,hbr);
                    DeleteObject(hbr);
                    // Den Text des Items nehmen und mit Textout darstellen
    
                    TextOut(dis->hDC, dis->rcItem.left, dis->rcItem.top, strcpy(buf,rest.c_str()), strlen(buf)-9);
    
                 }
    
                return 0;
            }
        case WM_CTLCOLORLISTBOX:
            {
                return (LRESULT)CreateSolidBrush(RGB(0,0,0));
    
            }
    

    ist leider abundzu über den umweg mit strings gegangen da ich es oft umständlich finde manche sacehn mit char [] zu realisieren.
    Farben musst du natürlich anpassen



  • oh beinahe hätt ichs vergessen:
    du musst einen 3*3 stelligen farbwert voranstellen also zb:
    255255255Ich bin ein weißer Text!



  • Vielen Dank, aber vielleicht habe ich meine Frage etwa ungenau formuliert.

    Also: Die ListBox existiert bereits in einem Dialog. Bei einer bestimmten Bedingung, nicht unbedingt eine WM, sollen ganz bestimmte FZeilen der ListBox eingefärbt werden, Ändert sich diese Bedingung, sollen andere Felder eingefärbt werden.

    Nochmals Danke für Deinen Vorschlag, aber ich war nicht in der Lage ihn auf mein Problem umzumünzen.

    Hättest Du oder jemand anderes vielleicht noch andere Vorschläge?



  • Muß natürlich Zeilen und nicht FZeilen heißen



  • bastel dir eine funktion ChangeColor, wo du die ersten 9zeichen des strings veränderst, und schick dann neInvalidateRect hinterher um nen redraw zu bewirken.
    Ich hoffe ich habe jetzt dein Problem getroffen.



  • oder du machst in der WM_DRAWITEM noch ne if rein die überprüft welche bedingung grade herscht, und dann die Farebn dementsprechen wählt


Anmelden zum Antworten