TextOut klappt nicht



  • Ich habe angefangen ein Programm zu programmieren und nun möchte ich Text auf Button Klick ausgeben. Ich habe nun BeginPaint,TextOut und EndPaint unter WM_COMMAND geschrieben da ja ein Button Klick WM_COMMAND auslöst und der Text ja nicht von Anfang an da stehen soll wie es unter WM_PAINT wäre. Mit irgendwelchen Abfragen wie wenn Button gedrückt war zeichne das und das möchte ich unter WM_PAINT nicht arbeiten weil so etwas den Code nicht grade schmälert.
    Gibt es eine Möglichkeit die Nachricht WM_PAINT aus dem do Block von "case WM_COMMAND:" heraus abzuschicken?



  • Mit InvalidateRect kannst du ein Neuzeichnen fordern.

    Schreibt die Textausgabe auf jeden Fall in WM_PAINT.

    Dann nimmst du einfach noch eine bool-Variable hinzu und die setzt du in WM_COMMAND und in WM_PAINT fragst du sie ab und zeichnest den Text gegebenfalls.



  • Eins vorweg: BeginPaint/EndPaint dürfen nur bei WM_PAINT benutzt werden, nicht bei WM_COMMAND.

    Mit InvalidateRect() veranlasst du indirekt ein WM_PAINT, wenn du aber direkt danach UpdateWindow() aufrufst, wird WM_PAINT sofort geschickt und bearbeitet.



  • Danke für eure Hinweise, klappt prima.
    An InvalidateRect() habe ich garnicht gedacht ich habe es mit UpdateWindow() probiert hatte aber nicht geklappt.



  • Hallo!
    Ich muss das ganze nochmal ausgraben weil ich
    das Programm einfach nicht zum Laufen kriefge.
    Kann einer mal kurz schreiben an welche Stelle ich was schreiben soll?
    Also mit dieser InvalidateRect().
    Viele Grüße,
    Björn



  • InvalidateRect rufst du einfach dann auf, wenn dein Fenster neu gezeichnet werden soll 🙄 Und in WM_PAINT zeichnest du dann eben immer 😉



  • schon klar!
    ich muss aber ja irgendwo TextOut() oder so hinpacken.
    bzw. wie wahr das mit dem BOOL-Wert?
    Björn



  • TextOut packst du nach WM_PAINT. Wegen dem letzten Parameter:

    Specifies whether the background within the update region is to be erased when the update region is processed. If this parameter is TRUE, the background is erased when the BeginPaint function is called. If this parameter is FALSE, the background remains unchanged.


Anmelden zum Antworten