SetTimer



  • Hallo,

    wie ist der Weg, um in einer [MS]DI-Anwendung das Fenster regelmäßig
    auffrischen zu lassen?
    Ich habe laut MFC-Hilfe die Routine
    OnStartTimer(Mit SetTimer ) und in CMainFrame::OnCreate
    aufgerufen.
    Mit dem Assistenten WM_TIMER ChildFrm::OnTimer erzeugt,
    wird aber nicht aufgerufen.
    Wenn ich den OnTimer ins Mainfrm stelle gehts.

    Was mache ich falsch?

    Danke,

    Steffen



  • http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel2.htm
    Abschnitt 2.2

    //in einer Initialiserungs-/Start-Funktion:
    SetTimer( 1, 1000, NULL); //Zeitgeber namens ID 1 starten, Zeitintervall: 1 Sekunde
    
    //...
    
    void CXXXDlg::OnTimer(UINT nIDEvent) //WM_TIMER 
    /*   http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/timers/timerreference/timermessages/wm_timer.asp */
    {
      //man könnte hier auch nIDEvent auswerten, wenn man mehrere Timer hat
      //irgendetwas machen, das jede Sek. erfolgen soll
      CDialog::OnTimer(nIDEvent);
    } 
    
    //...
    
    //nach Beendigung der Arbeit:
    KillTimer(1); //Timer mit der ID 1 zerstören
    


  • Danke,

    aber ich spreche von einer SDI/MDI-Anwendung. Dort
    wir kein Dlg-Fenstergerüst, sondern ein ChildFrm-Gerüst
    erstellt.
    Und wenn ich SetTimer in ChildFrm:: aufrufe, bekomme ich
    vom Debugger ein Riesen Memory-Leak (???!) angezeigt.
    und vom Mainfrm wird OnTimer nur in Mainfrm, nicht
    in Childfrm/Appfrm aufgerufen.
    Warum wird die WM_TIMER-Nachricht nicht an alle
    Childfenster der Anwendung durchgereicht? 😕

    Gruß,
    Steffen


  • Mod

    Also SetTimer alleine erzeugt kein Leak! Höchstens eine Timerbehandlung die leaked!

    Baue in Deinem View (ob MDI/SDI spielt keine Rolle) OnCreate Handler den SetTimer ein. Platziere den OnTimer Handler im View und führe einfach Invalidate aus. Das wars.



  • Danke für die Antworten, aber das funktioniert so nicht.
    Mein Projekt nenne ich Forum.
    Neues Projekt->MFC-Anwendung forum
    Anwendungstype Einfaches Dokument
    Edit forumview.cpp
    Meldungen->WM_TIMER <Hinzufügen> OnTimer
    SetTimer in CForumView::CForumView() aufrufen
    Erstellen
    Debug

    OnCreate wird in der ForumView.cpp nicht angeboten, und wenn man
    es reinschreibt auch nicht aufgerufen.
    wenn ich SetTimer in CForumView::CForumView() oder
    CForumView::PreCreateWindow(CREATESTRUCT& cs)
    schreibe, Haltepunkt auf den SetTimer setze und dann
    einen Step mache, kommt im Debugfenster:

    Detected memory leaks!
    Dumping objects ->
    p:\vhdl\ekg\pgm\ekg\forum\forumview.cpp(18) : {79} client block at 0x00325508, subtype c0, 88 bytes long.
    ... (ellenlang)

    🙄 😡 😕

    Steffen



  • WM_CREATE muss de überschreiben... dann hast de deine OnCreate 🙂



  • Vielen Dank 🙂 🕶

    Darauf muß man kommen,

    Gruß,

    Steffen


Anmelden zum Antworten