static feld färben



  • Also ich habe einen Dialog und möchte dort gerne einem static control eine andere Farbe geben. Ich habe dazu folgenden code genomme:

    case WM_CTLCOLORSTATIC:
    
    		if(lParam==IDC_STATIC)
    		{
    		SetTextColor((HDC)wwpp, RGB(0, 0, 255));
    		return (BOOL) hBrush;
    		}
    

    aber dieser funktioniert nur wenn ich die if weg mache... aber dann werden alle felder eingefärbt. Wie sollte der code den aussehn um nur bei einem feld die farbe zu ändern.



  • Indem Du deinem Feld eine eindeutige ID gibst und sie dementsprechend in der if-Abfrage einbaust...

    case WM_CTLCOLORSTATIC:
        if(lParam==IDC_MEINFARBIGESSTATICFELD)
        {
            SetTextColor((HDC)wwpp, RGB(0, 0, 255));
            return (BOOL) hBrush;
        }
        return FALSE;
    


    1. lParam ist das HWND nich der DlgCtrlID des statics
    2. IDC_STATIC sollte nur für controls verwendet werden, die nicht "identifiziert" werden müssen

    [cpp]
    if( GetDlgCtrlID( (HWND)lParam)==IDC_ST_PAINT_ME)
    {
    SetTextColor((HDC)wwpp, RGB(0, 0, 255));
    return (LRESULT) hBrush;
    }
    [/cpp]



  • peterchen schrieb:

    [cpp]
    return (LRESULT) hBrush;
    [/cpp]

    WM_CTLCOLORSTATIC

    MSDN schrieb:

    If a dialog box procedure handles this message, it should cast the desired return value to a BOOL and return the value directly. If the dialog box procedure returns FALSE, then default message handling is performed.

    Bei Dialogen soll man auf BOOL casten (da er es in seinem Code selber tut, gehe ich mal davon aus, das er es in einer DialogProzedur macht. Bei "normalen" Fensterprozeduren hast Du natürlich Recht)...



  • ups - da unten hab ich nicht mehr gelesen 🤡



  • thx fuer die Antworten, hat super geklappt :).


Anmelden zum Antworten