WM_PAINT bei parent unterdrücken



  • Hallo,

    ich habe folgendes Problem und würde mich sehr über Ratschläge freuen:

    Ich hab ein Fenster, welches einen modalen Dialog geöffnet hat, welcher wieder
    einen modalen Dialog öffnet. Dieser letzte Dialog setzt einen Timer
    und verarbeitet die WM_TIMER Msg's. Jetzt kriegt das Hauptfenster bei jedem
    Timerevent ein WM_PAINT geschickt, was ein hässliches flackern verursacht.
    Wieso ist das so und wie kann ich das beheben?

    Danke fürs lesen und im Voraus fürs antworten.

    Jockel



  • Würde ich nicht machen, weil sonst Dein Parent-Window nach dem Schließen des Dialogs nicht mehr neu gezeichnet wird.

    Wenn Du wissen wilst, was Du falsch gemacht hast, solltest Du den Code posten. Möglicherweise wird die WM_Timer erst vopm Hauptfenster aufgefangen und dann an den Dialog weitergeleitet. Das kann maan mit IsDialogMessage() ändern.



  • Verwende einen Back-Buffer (siehe FAQ).
    Falls das nicht reicht, kannst Du noch das Löschen des Hintergrunds über ➡ WM_ERASEBKGND verhindern. Manchmal hilft es auch, wenn man bei der Erstellung der Child-Fenster das Flag WS_CLIPCHILDREN angibt.



  • Mmmh, an den Symptomen wollte ich eigentlich nicht rumdoktoren.
    Ich verstehe nicht, was das mit dem Timer zutun hat. Testweise macht
    die Timerfkt gar nichts, trotzdem kommt das Paint-Event. Wenn ich auf
    den Dialog rumklicke oder verschiebe passiert nichts.

    Komisch.


  • Mod

    Mit Sicherheit passiert in Deiner TimrProc irgendwas.
    Aber mich macht schon stützig, dass Du schreibst: "Bekommt ein WM_PAINT geschickt!"

    WM_PAINT darf man nicht selber versenden. Dazu dient InvalidateRect und UpdateWindow, oder RedrawWindow!



  • @JockelX
    Solange Du den Code geheim hältst, wird es schwierig sein, den Fehler zu finden. 😕



  • Bekommt von irgendwoher geschickt ist natürlich gemeint, aber entschuldigen muss
    ich mich trotzdem. Meine TimerProc macht tatsächlich noch was, nämlich drucken.
    Wenn ich das auch auskommentiere verschwindet das Flackern. Das Problem
    scheint also irgendwo in der Druckerei zu liegen und da könnt ihr mir
    natürlich nicht helfen.

    Also, Danke und Entschuldigung für die unnötige Mühe.

    Jockel


Anmelden zum Antworten