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