SetTimer funkt nicht



  • Hy,
    ich hab manuel mir einen Timer mit OnTimer Funktion gebastelt. Aber da passiert einfach nix. Hab bischen im Forum rumgesucht und da steht etwas von wegen nicht nicht ohne Assistent. Wie kann ich denn einen Timer mit Assistent hinzufügen (VS 7.0)? Oder was mach ich immer falsch?

    // Mein FrameDlg.h file

    #pragma once
    #include "afxcmn.h"
    #include "resource.h"
    
    #define ID_MYTIMER 0
    #define MY_DEFAULTRANGE 100
    
    class CFrameDlg : public CDialog
    {
        DECLARE_DYNAMIC(CFrameDlg)
    
    public:
        CFrameDlg(CWnd* pParent = NULL);
        virtual ~CFrameDlg();
    
        enum { IDD = IDD_FRAME };
        virtual BOOL OnInitDialog();
        virtual afx_msg LRESULT OnTimer(WPARAM wParam, LPARAM lParam);
    protected:
        virtual void DoDataExchange(CDataExchange* pDX);
    
        DECLARE_MESSAGE_MAP()
    
    };
    

    // Mein FrameDlg.cpp file

    .
    .
    .
    BOOL CEierUhr::OnInitDialog()
    {
    CDialog::OnInitDialog();

    m_nTimerId = SetTimer( ID_MYTIMER, 100, NULL);

    return(TRUE);
    }

    afx_msg LRESULT CEierUhr::OnTimer(WPARAM wParam, LPARAM lParam)
    {
    AfxMessageBox("Timer");

    return afx_msg LRESULT();
    }

    BEGIN_MESSAGE_MAP(CEierUhr, CDialog)
    ON_MESSAGE(WM_TIMER, OnTimer)
    END_MESSAGE_MAP()
    .
    .
    .
    [/cpp]



  • nIDEvent
    Specifies a nonzero timer identifier.



  • Ja da haste Recht. Aber auch wenn ich ID_MYTIMER auf zb. 1 sätze tuht sich da nix



  • Gibt SetTimer(...) einen gültigen Wert (!=0) zurück? Der Timer muss auf jeden Fall mit KillTimer(...) wieder freigegeben werden.



  • du benutzt settimer irgendwie falsch
    SetTimer (hwnd,deintimer, 100, NULL);



  • @syntax_error: CWnd::SetTimer() wird hier verwendet, der braucht kein hwnd... 😃



  • SetTimer( 1, 100, NULL);

    > Gibt 1 zurück, also funktioniert das schon einmals

    Liegt das vieleicht daran das mein OnTimer nicht im Main ist?!
    *weiß ansonsten auch nix*

    Bei mir hat das früher so sonst auch immer funktioniert aber da hab ich mit VS 6.4 (oder so) gearbeitet mit Assistenten. Nun hab ich halt 7.0 und ohne Assistenten



  • Versuch's mal so:

    // in der Header:
    afx_msg void OnTimer(UINT nIDEvent);
    
    //in der cpp:
    
    // in der message_map
    ON_WM_TIMER()
    
    // die Funktion
    void CMyDlg::OnTimer(UINT nIDEvent)
    {
      CDialog::OnTimer(nIDEvent);
    }
    


  • Okey,
    das geht auch NICHT! *gr*
    Also da ist kein Fehler im CODE *glaub*, da ich im anderen Projekt genau das gleich stehen hab und da funktioniert das ohne Probleme. Kann ich irgenwie mit dem debugger sehen ob ein Timer leuft und wann er ausgelöst wird. Kann das sein das irgeneine andere Klasse den Timmer abfängt *ka*



  • Da dieser Code normalerweise IMMER funzt, wüsste ich zu gern, wie chaotisch der Rest Deines Codes aussieht!
    P.S. Ich frage mich, weshalb alle Deine Messagebehandlungsroutinen virtual sind. Kein Anwendungsassistent hat bei mir jemals virtual davor geschrieben.

    [ Dieser Beitrag wurde am 10.04.2003 um 12:58 Uhr von RenéG editiert. ]


Anmelden zum Antworten