Titelleiste neu zeichnen?



  • Hallo,
    bei der Client-Area gehts ja mit InvalidateRect().
    Wie aber bei der Titelleiste?
    Ein einfaches Senden von WM_NCPAINT funktioniert unter Win9x nicht.

    Danke,
    Black Shadow



  • @Black Shadow
    Ich glaub, das gibt es nicht - warum auch 😕 Wenn du mit SetWindowText(hwnd,"....") eine Nachricht sendest, wird doch die Titelleiste automatisch geupdatet 🙂

    MfG Unwissender 🙂



  • Hallo (Un)wissender,
    vielen Dank, der Trick funzt perfekt 🙂
    GetWindowText() und dann SetWindowText() ... typisch Windows.

    MfG,
    Black Shadow



  • Schonmal RedrawWindow mit RDW_FRAME probiert?



  • Hallo,
    genau die Funktion habe ich gesucht 🙂 .
    Ich habe sie wohl nicht gefunden, weil die nicht unter "Painting and Drawing functions" in der MSDN aufgelistet ist.

    Vielen Dank,
    Black Shadow

    [ Dieser Beitrag wurde am 24.11.2002 um 00:25 Uhr von Black Shadow editiert. ]



  • Hallo,
    ich habe gerade ein Problem mit der Funktion RedrawWindow:
    Wenn ich nicht die ganze Titleleiste neu zeichnen möchte, so soll ich laut MSDN als 2. Parameter eine rect-Struktur übergeben, die das den Bereich enthält, der neu gezeichnet werden soll.
    Doch leider wird dann garnichts neu gezeichnet 😡 .
    Was für Koordinaten muss ich da übergeben? Ich ging bis jetzt immer vom Fenster ganz links oben aus, vielleicht mein die Funktion damit die Clientfläche?

    Danke für weitere Antworten.



  • Normalerweise ist der Nonclient-Bereich um ein Vielfaches kleiner als der Clientbereich und somit die Updatezeit vernachlässigbar gering, daher wird immer der komplette Nonclient-Bereich gezeichnet, vorausgesetzt, der Parameter RDW_FRAME wurde verwendet.



  • Hallo,
    wenn er aber den ganzen NonClient-Bereich neu zeichnet, und das Programm ein Menü hat, so "flimmert" dies (bei Win2k jedenfalls) störend stark.
    Naja, dann werde ich wohl Get/SetWindowText benutzen und dann ein WM_NCPAINT schicken.

    Trotzdem danke für deine Hilfe.



  • Warte mal

    So wie ich verstanden habe, willst Du manuell den Rahmen neu zeichnen!
    Damit überschreibst Du also WM_NCPAINT!

    Das dürfte auf keinen Fall "flimmern", ausser, du schickst die Nachricht noch an die Standardbehandlungsroutine weiter!



  • Hm...
    also was ich eigentlich machen will ist, in der Titelleiste an eine bestimmte Stelle was zu malen (5x5 Pixel).
    Dazu fange ich WM_NCPAINT ab, führe DefWindowProc() aus und male dann in WM_NCPAINT weiter (wenn ich danach DefWindowProc() aufrufe, wird meine Stelle ja übermalt).
    Wenn ich aber meine 5x5 Pixel wo anders auf der Titelleiste zeichnen will, dann reicht es unter Windows XP ein WM_NCPAINT zu schicken und oben genanntes zu tun.
    Unter 9x wird aber der alte Bereich nicht geupdadet.
    Deshalb ein RedrawWindow() und in WM_NCPAINT oben genanntes.
    Leider flimmert unter Win2k das Menü.
    Ich will also nicht die ganze Titelleiste neu zeichnen, sondern nur was draufmalen.

    Das dürfte auf keinen Fall "flimmern", ausser, du schickst die Nachricht noch an die Standardbehandlungsroutine weiter!

    Naja, ich rufe ja erst DefWindowProc() und dann male ich... aber mit GetWindowText... flimmerts nicht 🙄 .

    MfG,
    Black Shadow


Anmelden zum Antworten