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...


Anmelden zum Antworten