PeekMessage Invalidate

Thomasio

Erfahrenes Mitglied
Ich habe eine Funktion, die ein Fenster in einer Schleife verschieben kann

Code:
for(int i = 0; i < 100; i++)
   {
      int newleft = 0;
      int newtop = 0:

     // berechne neue Position

      MoveWindow(myWindow, newleft, newtop, 100, 100, true);
   }

Problem dabei ist, dass er innerhalb der Schleife die Paint Message nicht ausführt, sondern erst hinterher, dazu hat mir ein freundlicher Helfer hier im Forum erklärt, ich muss machen:

Code:
MSG msg;

for(int i = 0; i < 100; i++)
   {
      int newleft = 0;
      int newtop = 0:

     // berechne neue Position

      MoveWindow(myWindow, newleft, newtop, 100, 100, true);

      while(PeekMessage(&msg, myWindow, 0, 0, PM_NOREMOVE))
            {
                GetMessage(&msg, myWindow, 0, 0 );
                TranslateMessage( &msg );
                DispatchMessage( &msg );
            }
   }

Das klappt prima, und ich habe sogar begriffen warum

Nun möchte ich fast das Gleiche mit einem Fenster machen, nur dass es immer nur neu gezeichnet werden soll, ohne es zu verschieben
Dummerweise lässt WM_PAINT sich nicht als Message senden, bzw. funktioniert nicht immer (MSDN sagt auch, soll man nicht machen)

Also verwende ich InvalidateRect(), was aber keine Message ist, sprich ich kann da noch so lange Peek´en, er zeichnet das Fenster erst neu, wenn die Schleife durch ist

Code:
for(int i = 0; i < 100; i++)
   {

     // berechne irgendwas

      InvalidateRect(myWindow, NULL, false);

      // Hier müsste er dann das Fenster neu zeichnen, bevor die Schleife weiter macht
      // aber wie?

   }

Kann mir jemand auf die Sprünge helfen?
 
Einfach ein UpdateWindow( myWindow ) aufrufen.

Das erzwingt das Senden einer WM_PAINT Message, wenn es etwas zu updaten gibt.
 
Zurück