Timer



  • ich finde beim MFC leider keine bereits vorhandenen WM_**** 😞
    WinAPI hatte doch genug davon*g*

    hab in der MSDN nachgeschaut MSDN

    kennst du ein Beispiel dafür?
    ansonsten bitte noch ein wenig weiterhelfen 😃

    mfg (c)h



  • chille07 schrieb:

    ich finde beim MFC leider keine bereits vorhandenen WM_**** 😞

    Mach mal Rechtsklick auf ne Klasse und dann "Behandlungsroutine für Windows-Nachrichten hinzufügen" 😉

    Dann Doppelklick auf die entsprechende Nachricht und schon haste deine OnTimer-Funktion.

    Den Timer an sich startest du mit SetTimer und stoppst ihn per KillTimer, wie estartu schon geschrieben hat. Die Funktionen solltest du in der MSDN finden...

    Gruß
    Brainiac



  • danke 😃
    werds mal versuchen...

    mfg (c)h



  • ok... ein Beispiel hab ich auch gefunden: Beispiel

    darin ist von

    void CMainFrame::OnStartTimer(); // ???
    void CMainFrame::OnStopTimer(); // ???
    void CMainFrame::OnTimer(UINT nIDEvent);
    

    die Rede.

    Die beiden markierten ("OnStopTimer()" und "OnStartTimer()") finde ich wieder mal nicht 🙄
    ich dachte die wären vielleicht bei den "Virtuellen Funktionen" aber wie's ausschaut habe ich mich da geirrt... woher bekomme ich die?

    mfg (c)h



  • man KANN die Methoden selbst einfügen, nur werden Sie dann nicht aufgerufen...

    void CMainFrame::OnStartTimer() 
    {
       m_nTimer = SetTimer(1, 2000, 0);
    }
    
    void CMainFrame::OnStopTimer() 
    {
       KillTimer(m_nTimer);   
    }
    
    void CMainFrame::OnTimer(UINT nIDEvent) 
    {
       MessageBeep(0xFFFFFFFF);   // Beep
    
       // Call base class handler.
       CMDIFrameWnd::OnTimer(nIDEvent);
    }
    

    mfg (c)h



  • Na, dann ruf du sie doch auf. 🤡
    Bei einem Dialog bietet sich OnInitDialog für OnStartTimer an. 🙂



  • hmm... es funktioniert jetzt, aber ich habe genau das gemacht, was wir (laut unserem Programmierlehrer) nicht machen sollten, nämlich im "grauen Bereich" herumzumanipulieren.

    protected:
    	//{{AFX_MSG(CMainFrame)
    	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    	afx_msg void OnKeyDown();
    	afx_msg void OnKeyLeft();
    	afx_msg void OnKeyUp();
    	afx_msg void OnKeyRight();
    	afx_msg void OnKeySpace();
    	afx_msg void OnTurnLeft();
    	afx_msg void OnTurnRight();
    	afx_msg void OnTimer(UINT nIDEvent);
    	afx_msg void OnStartTimer();
    	afx_msg void OnStopTimer();
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    

    hab da einfach die OnStartTimer() und OnStopTimer eingefügt, und hoffe dass es dadurch in Zukunft keine Komplikationen geben wird 😃

    PS.: "OnInitDialog" gibts auch nicht 😃

    mfg (c)h



  • Wieso hast du die da hin gepackt?
    Das sollte auch gehen:

    protected:
        //{{AFX_MSG(CMainFrame)
        afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
        afx_msg void OnKeyDown();
        afx_msg void OnKeyLeft();
        afx_msg void OnKeyUp();
        afx_msg void OnKeyRight();
        afx_msg void OnKeySpace();
        afx_msg void OnTurnLeft();
        afx_msg void OnTurnRight();
        afx_msg void OnTimer(UINT nIDEvent);
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
        void OnStartTimer();
        void OnStopTimer();
    };
    

    🙂



  • ich fragte mich, ob "ER" dann weiß, dass das "DIE"(richtige) Funktion ist. 😃

    mfg (c)h



  • Jupp, der weiß das schon.

    Denn der Unterschied deines Programms zu dem Beispiel dürfte sein, dass die Funktionen in dem Beispiel Handlerfunktionen für Buttons sind.
    Darauf deutet das On... hin. 🙂

    Außerdem wird afx_msg durch "nichts" ersetzt. Ob das da steht oder nicht ist egal, das ist eher ein Hilfsmittel für dich, damit du weißt, dass das ein Message-Handler ist. 😃


Anmelden zum Antworten