Timer Funktion grundsätzliche Frage



  • Hallo,

    wenn ich für die Nachricht WM_TIMER die Funktion OnTimer()
    hinzufüge, steht in der Funktion bereits CDialog::OnTimer(nIDEvent);
    Wieso ?
    Ich meine wieso ruft die Funktion sich selber auf ?
    Mit dem auslösen der Timer Nachricht wird sie doch einmal komplett ausgeführt.

    Erleuchtet mich :p

    Viele Grüße

    Sven



  • Hallo,

    einen Timer aktivierst Du mit SetTimer(), wo Du auch das Intervall in ms angibst. Jedesmal, wenn das Intervall abgelaufen ist, erhält Dein Fenster die WM_TIMER-Nachricht mit der spezifizierten Timer-ID.
    Wenn Du nun die OnTimer()-Behandlungsroutine für WM_TIMER Deinem Fenster hinzugefügt hast, so wird eben jedesmal wenn Dein Fenster eine WM_TIMER-Nachricht bekommt, diese Routine ausgeführt.

    So, wie bei allen Nachrichtenbehandlungsroutinen.



  • Das weiß ich ja, ich meinte dies hier:

    void CSvenDlg::OnTimer(UINT nIDEvent) 
    {	
    // TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen
    
    CDialog::OnTimer(nIDEvent);//wieso ruft die Funktion sich hier noch mal auf?
    }
    


  • Interessante Frage, alle anderen Nachrichtenhandler machen das auch, z.B. OnInitDialog(). Da würde ich es noch weniger erwarten, weil das ganze nur einmal ausgeführt wird. Vielleicht ist es eine Art Bestätigung für den Compiler, dass es korrekt ausgeführt wurde?

    Ausserdem fällt mir gerade auf, dass es sich nicht selbst aufruft, sondern die Funktion der Elternklasse, in Deinem Fall CDialog. Das ist was anderes...

    Ah, ich glaub ich habs: Zuerst wird Dein eigener Code in Deinem OnTimer ausgeführt. Danach wird der Rest ausgeführt, der eben in dem Eventhandler der Elternklasse steht. Richtig? 🙂



  • eigentlich wird da nur diese 'DefWindowProc()' aufgerufen, diese funktion für unbehandelte nachrichten. kann man eigentlich weglassen...


Anmelden zum Antworten