WM_MOVE _ WM_PAINT _ DrawText



  • Wie kann ich erreichen, dass mir ein Fenster automatisch WM_PAINT Nachrichten schickt, wenn es der Benutzer an der Titelleiste über den Bildschirm zieht? Bisher musste ich das so schreiben, damit der Fensterinhalt auch dann neu gezeichnet wird, wenn das Fenster bewegt wurde:

    switch(imsg){
     case WM_MOVE:
     case WM_PAINT:
        // Anweisungen zum Zeichnen des Fensters, wobei WM_MOVE gleich behandelt
        // wird wie WM_PAINT
    }
    

    Gibt es da irgendeinen versteckten Fensterklassen- oder Fensterstil?
    GDI_Funktionen zeichnen nämlich nicht ordentlich, wenn der Benutzer die Position des Fensters auf dem Bildschirm verschiebt.



  • Anfaenger99 schrieb:

    switch(imsg){
     case WM_MOVE:
     case WM_PAINT:
        // Anweisungen zum Zeichnen des Fensters, wobei WM_MOVE gleich behandelt
        // wird wie WM_PAINT
    }
    

    Das ist überhaupt nicht gut. Bei WM_PAINT rufst du wahrscheinlich BeginPaint/EndPaint auf. Bei WM_MOVE darfst du diese Funktionen aber gar nicht benutzen.
    Du könntest bei WM_MOVE einfach InvalidateRect aufrufen, dann würdest du beim Bewegen WM_PAINTs bekommen.
    Aber was genau wird denn falsch gezeichnet, wenn dein Fenster bewegt wird? Normalerweise übernimmt Windows ja das Verschieben des Fensterinhalts und schickt WM_PAINT nur, wenn es wirklich irgendwas neu zu zeichnen gibt.



  • Beim Erstellen der Fensterklasse die Class Styles CS_VREDRAW und CS_HREDRAW einfach angeben...


Anmelden zum Antworten