2009-05-06 4 views
4

Je suis confus avec la fonction SetTimer().Utilisation de la fonction Windows SetTimer()

SetTimer() prend trois paramètres:

SetTimer(1,2000,Timerflow); 

Cependant, je l'ai vu une autre version de SetTimer qui prend quatre paramètres:

SetTimer(NULL,1,2000,Timerflow); 

Quelle est la différence entre ces deux fonctions?

Je connais SetTimer() Trois paramètres. Mais lorsque je tente la fonction de quatre paramètres SetTimer(), je reçois l'erreur:

error C2660: 'SetTimer' : function does not take 4 parameters 

Alors, quelle est la principale différence et ce qui cause cette erreur?

Répondre

2

La seule API Windows appelée SetTimer prend quatre paramètres. Vraisemblablement l'autre fait partie de MFC ou d'un autre framework, et le premier paramètre est impliqué par l'objet sur lequel vous l'appelez. Par exemple:

CWnd * w = .... // get window somehow 
w->SetTimer(1,2000,Timerflow); 
5

La version à 4 paramètres est la version de l'API Win32, et le premier paramètre est un handle de fenêtre.

La version à 3 paramètres est membre de la classe CWnd de MFC et fonctionne avec le handle de fenêtre de l'instance CWnd pour laquelle vous l'appelez.

Si vous avez besoin d'appeler l'API Win32 4 paramètres à partir d'une méthode d'un objet dérivé de CWnd, faites ceci:

::SetTimer(NULL, 1, 2000, Timerflow); 
1

Si vous utilisez SetTimer pour créer une minuterie dans les classes de GUI telles que la CWnd de MFC, vous pouvez utiliser le formulaire 3 paramètres:

UINT SetTimer( 
    UINT nIDEvent,    // timer identifier 
    UINT uElapse,    // time-out value 
    TIMERPROC lpTimerFunc  // address of timer procedure 
); 

Mais si vous l'utilisez dans les classes non-GUI, vous devez utiliser le formulaire 4 paramètres. Le premier paramètre consiste à spécifier quel composant de l'interface graphique répondra pour l'événement timer. Cette version de la fonction est appelée à partir de l'API Win32.

eUINT SetTimer( 
    HWND hWnd,    // handle of window for timer messages 
    UINT nIDEvent,   // timer identifier 
    UINT uElapse,    // time-out value 
    TIMERPROC lpTimerFunc  // address of timer procedure 
); 

C'est très simple, n'est-ce pas?

Questions connexes