Fenster per SetTimer/KillTimer animieren - Wie?
-
Hallo.
Ich würde gerne ein Fenster per SetTimer/KillTimer animieren bzw resizen, so dass ich im Programmcode bestimmen kann, wie schnell die Animation auflaufen soll und diese auf jedem PC gleich schnell läuft.Zwar kann ich mein Fenster animieren bzw resizen - allerdings auf eine Art und Weise die alles andere als schön ist. Und ich weiß, dass man es so NICHT programmieren würde, da während der Animation keine Events verarbeitet werden und das mit dem Sleep() ist in diesem Fall auch nur um die Animation wahrzunehmen, bzw das es geht.
Ich gehe davon aus, dass man so etwas mit SetTimer/KillTimer machen würde... nur bekomme ich das irgendwie nicht auf die Reihe
Vielen Dank im voraus.
ZIP Archive
178 KB (Visual Studio 2012 Project)
-
*push* Niemand eine Idee?
-
Die Lösung ist (offensichtlich) so einfach das es fast peinlich ist ...
#define IDT_TIMER1 120 RECT wr;
case WM_COMMAND: switch(LOWORD(wParam)) { case 1: KillTimer(hWnd, IDT_TIMER1); SetWindowPos(hWnd,0,100,100,400,300, SWP_SHOWWINDOW); break; case 2: // Wie kann man diese Animation mit SetTimer() machen ... // Set timer SetTimer(hWnd, // handle to main window IDT_TIMER1, // timer identifier 10, // 0.01-second interval (TIMERPROC) NULL); // no timer callback break; } break; case WM_TIMER: switch (wParam) { case IDT_TIMER1: // process the timer GetWindowRect( hWnd, &wr); if(wr.bottom-wr.top <= 80) KillTimer(hWnd, IDT_TIMER1); MoveWindow(hWnd, wr.left, wr.top, wr.right-wr.left, wr.bottom-wr.top-1, TRUE); return 0; } break; case WM_CLOSE: // Destroy the timers. KillTimer(hWnd, IDT_TIMER1); ...
For an example, see Creating a Timer
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644906(v=vs.85).aspx
-
Vielen Dank für Deine Antwort und insbesondere für den lauffähigen Code!!
Tja, auch wenn es peinlich sein mag... Der Fehler in meinen hier nicht geposteten Beispielen lag u.a. innerhalb WM_TIMER...