Statics, die 1.000.000ste



  • Und wieder gibt es ein Thema über Statics!
    Wie kann ich die Schrift auf einem Static vertikal zentrieren? Und irgendwie krieg ich es nicht hin, ein Static die Hintergrundfarbe zu geben, die ich brauche. Es klappt zwar ein Staticfeld über SetBkMode Transparent zu machen, aber es klappt nicht es mit SetBkColor beliebig einzufärben. Wie geht das?

    Mfg Ominion



  • Was die Hintergrundfarbe betrifft, so sollte Dir WM_CTLCOLORSTATIC weiterhelfen können.

    Bei der anderen Sache hab' ich keine Ahnung. 😞



  • Damit mach ich das derzeitig ja, aber das klappt ja eben nicht. Hier ist erstmal der Code zum Transparenten Static:

    case WM_CTLCOLORSTATIC:
        SetTextColor ((HDC)wParam, RGB (255, 255, 255));
        SetBkMode ((HDC)wParam, TRANSPARENT);
    return 0;
    

    In wie weit muss ich den Code abändern, um das zu erreichen?

    Mfg Ominion



  • MSDN schrieb:

    If an application processes this message, the return value is a handle to a brush that the system uses to paint the background of the static control.

    Also nicht

    return 0;
    

    sondern

    return CreateSolidBrush(0xFFFFFF); // oder welche Farbe auch immer
    

    sollte funktionieren.



  • Danke hat geklappt. Ich hatte ursprünglich auch nicht 0 sondern (LRESULT)GetStockObject (NULL_BRUSH)
    aber das ist ja eh gleich 0. Jetzt würde ich nur noch wissen wollen, wei ich den Text vertikal zentrieren kann.

    Mfg Ominion



  • Gibt es auch eine Möglichkeit mehrere Statics verschieden farbig zumachen?

    Mfg Ominion



  • Du bekommst ja im lParam das Handle zu dem Static geliefert, welches die Notification gesendet hat, also könntest Du sowas machen:

    if (lParam == hStatic1) {
        return CreateSolidBrush(0xFF0000);
    }
    if (lParam == hStatic2) {
        return CreateSolidBrush(0x00FF00);
    }
    ...
    

    Du müsstest dann nur zusehen, dass Du die Handles hStatic1, hStatic2 oder wie auch immer sie heißen in der WndProc zur Verfügung hast.



  • Danke! Ich hatte das Tutorial auf winapi.net gelsen, bin daraus aber nicht schlau geworden. Deshalb habe ich gefragt wie das geht. Jetzt bleibt nur noch die Frage wie ich die vertikal zentrieren kann. Notfalls muss ich eben mit der unschönen Variante \n arbeiten 😞

    Mfg Ominion



  • Ich musste den Code nur noch ein bisschen umändern, bis es funktioniert hat:

    if (HWND(lParam) == hStatic1) {
        return (LRESULT)CreateSolidBrush(0xFF0000);
    }
    if (HWND(lParam) == hStatic2) {
        return (LRESULT)CreateSolidBrush(0x00FF00);
    }
    

    Mfg Ominion



  • mantiz schrieb:

    return CreateSolidBrush(0xFFFFFF); // oder welche Farbe auch immer

    Keine gute Idee. Damit erzeugst du astreine Lecks.
    ➡

    The system does not automatically destroy the returned brush. It is the application's responsibility to destroy the brush when it is no longer needed.

    Lösung:
    Erzeuge den Brush in WM_CREATE, ändere diesen, falls du eine andere Farbe brauchst und lösche den Brush in WM_DESTROY.



  • groovemaster schrieb:

    Keine gute Idee. Damit erzeugst du astreine Lecks.

    Ups, jo, stimmt, so wäre es besser. 😃

    Warum überlese ich eigentlich immer genau diese Sätze in der MSDN? 🙄



  • Danke, hab ich gemacht.

    Mfg Ominion


Anmelden zum Antworten