Textfarbe von static



  • Klar geht das einfacher 🙂 CTLCOLORSTATIC is ja schonma ein guter anfang 🙂

    HBRUSH g_hbrBackground = CreateSolidBrush(GetSysColor(COLOR_WINDOW)); // am besten über main
    
    .
    .
    .
    case WM_CTLCOLORSTATIC:
         {
            if((HWND)lParam == hDeinStatic)
             {
                HDC hdcStatic = (HDC)wParam;
                SetTextColor(hdcStatic, RGB(0, 0, 255));
                SetBkColor(hdcStatic, GetSysColor (COLOR_BTNFACE));
                    return (LONG)g_hbrBackground;
            }
         }
    

    das sollte es eigentlich gewesen sein 🙂 kann sein das ich was vergesse hab sieht aber so gut aus ansonsten meld ich mich nochma

    viel spass damit

    mfg



  • Huch da hab ich wohl was falsch verstanden *G* man sollte die frage auchma richtig lesen 😉



  • Hallo,

    für alle die es interessiert: das Problem ist inzwischen gelöst.

    Ich weiß nicht, wie brilliant diese Lösung ist, bei mir funktioniert es aber.

    Man kann in static einfache Textausgaben mit TextOut machen. Diese haben dann eine vorher definierte Farbe/Hintergrundfarbe. Ich habe einfach eine Funktion
    geschrieben, die ich statt SetWindowText aufrufe. Bei mir sah das so aus:

    void SetWindowAn(HWND hwnd)
    {
        HDC hDC;
        hDC=GetWindowDC (hwnd);
        SetBkColor(hDC, RGB(130,130,130)); //meine Hintergrundfarbe: Dunkelgrau
          SetTextColor (hDC, RGB(255,0,0));  //meine Textfarbe: ROT
        TextOut(hDC, 0,0,"  AN ", 6);      
        ReleaseDC(hwnd, hDC);
    }
    

    Ich brauchte eben nur einen einzeiligen Text "AN" zu schreiben. Aber ich bin sicher, Ihr schafft es, die Funktion auf eure Bedürfnisse anzupassen.

    Im übrigen ist es nicht notwendig, die WM_PAINT Befehle des static abzufangen, Windows merkt sich (zumindest bei mir 🙄 ) den Inhalt des statics und stellt ihn ggf. wieder her.

    Mit SetWindowText kann man dann eben den "alten" Zustand wiederherstellen.

    Gruss,
    Sebastian



  • ps:

    als hwnd übergebe ich das Handle des static.



  • Und was denkst Du, wo ist das Problem in Deiner Funktion?

    Änder mal die Textfarbe, danach öffne ein Fenster, welches sich über Dein Fenster legt und dann bringe Dein Fenster wieder in den Vordergrund! Was passiert?



  • Hab ich gemacht, ist alles ok. 😕 Habe es aber noch nicht auf anderen Rechnern oder mit anderen Windows-Versionen probiert.



  • Die Verarbeitung von WM_CTLCOLORSTATIC ist schon richtig. In dieser Message weist du dem Control die Farbe über SetTextColor((HDC)wParam, RGB(255,128,64)); zu. Damit die Message kommt, wenn du willst, dass sich die Farbe ändert musst du ein Neuzeichnen des Staticcontrols mittles InvalidateRect(hStatic, 0, true); erzwingen.



  • Ha. Ich habs.

    wie ich gaaanz oben beschrieben habe, nutze ich einen Timer von 1/10s, der das Feld ständig aktualisiert.... Also fällt es bei mir gar nicht auf, wenn das Feld übermalt wird. Also muss man doch die WM_PAINT Nachrichten abfangen, wenn man das nicht so macht wie ich 🙄 (schäm).



  • Danke für alle Antworten. Problem gelöst.



  • @ D@niel $chumann:

    Oh Mann, das war zu einfach. Da hätte man echt drauf kommen müssen.


Anmelden zum Antworten