Listcontrol soll farbigen Text erhalten



  • Einem Listcontrol möchte ich mit .SetItemText einen Text in eines
    der Felder übergeben. Nun soll dieser Text jedoch in rot dargestellt
    werden.

    Für ein Static füge ich in OnCtlColor entsprechend folgendes ein um
    den Text farbig zu machen:

    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    if(nCtlColor == CTLCOLOR_STATIC) 
        {
             if (pWnd->GetDlgCtrlID () == IDC_STATICF) 
             {
                 pDC->SetTextColor(RGB(85,26,139));
    
             }
    

    Bei einem Listcontrol habe ich keine Ahnung wie es gehen soll.
    Sowas wie CTLCOLOR_LISTCONTROL gibt es ja nicht....



  • Du musst die Klasse überschreiben und das selbst einbauen. So einfach hat es MS nicht gemacht.
    Solltest Du nicht wissen was es bedeutet eine Klasse zu überschreiben dann suche dir eine Fertige Klasse bei Codeguru oder Codeproject.



  • Du müsstest in der WM_NOTIFY-Nachricht die CustomDraw-Benachrichtigung abfragen und kannst die Farbe verändern, kurz bevor sich das Listcontrol selbst zeichnet. Ob da was in den MFC implementiert ist, weiß ich nicht, aber damit hast du schonmal den Ansatz um es selbst zu implementieren.

    case WM_NOTIFY: {
        LPNMHDR hdr = (LPNMHDR)lParam;
    
        if( hdr->hwndFrom == GetDlgItem(hwndDlg,IDC_LISTVIEW) && hdr->code == NM_CUSTOMDRAW) {
            LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam;
    
            switch(lplvcd->nmcd.dwDrawStage) {
                case CDDS_PREPAINT:
                    return CDRF_NOTIFYITEMDRAW;
                case CDDS_ITEMPREPAINT:
                    return CDRF_NOTIFYSUBITEMDRAW;
                case CDDS_SUBITEM | CDDS_ITEMPREPAINT:
                    lplvcd->clrTextBk = RGB(0,0,0);
    
                    return CDRF_NEWFONT;
    
            }
            return CDRF_DODEFAULT;
        }
        break;
    

Anmelden zum Antworten