Il y a 2 méthodes d'utilisation des timers de Windows :
- Avec gestion du message WM_TIMER dans la fenêtre propriétaire.
- Avec appel direct d'une fonction.
Voici les 2 méthodes d'utilisation avec 2 timers à chaque fois :
1) Méthode avec gestion du message Windows
#define ID_TIMER_1 1000 // identificateur du timer 1
#define ID_TIMER_2 1001 // identificateur du timer 2
// --- Fonction de gestion des messages de la fenêtre
LRESULT CALLBACK WinProc
(
HWND hWnd // I:handle to the window
,UINT uiMsg // I:message to process
,WPARAM wParam // I:WPARAM parameter
,LPARAM lParam // I:LPARAM parameter
) // O:return code
{
switch (uiMsg)
{
// ----------------
// Créer la fenêtre
// ----------------
case WM_CREATE : // si c'est une fenêtre classique
case WM_INITDIALOG : // si c'est une boîte de dialogue
{
...
// --- Lancer les timers
SetTimer(hWnd,ID_TIMER_1,1000,NULL);// toutes les 1s
SetTimer(hWnd,ID_TIMER_2,2000,NULL);// toutes les 2s
}
return 0;
// ------------------
// Traiter les timers
// ------------------
case WM_TIMER :
{
if (wParam == ID_TIMER_1)
{
... Traitement du timer 1 ...
}
else if (wParam == ID_TIMER_2)
{
... Traitement du timer 2 ...
}
}
return 0;
// ---------------------
// Quitter l'application
// ---------------------
case WM_DESTROY : // si c'est une fenêtre classique
case "quitter" dans WM_COMMAND : // si c'est une boîte de dialogue
{
...
// --- Tuer les timers
KillTimer(hWnd,ID_TIMER_1);
KillTimer(hWnd,ID_TIMER_2);
...
}
return 0;
}
// --- Retour du traitement par défaut
return DefWindowProc(hWnd,uiMsg,wParam,lParam);
}
2) Méthode avec appel direct d'une fonction
// --- Fonction de traitement du premier timer
VOID CALLBACK Fonction1
(
HWND hWnd // I:handle to the window
,UINT uiMsg // I:WM_TIMER message
,UINT uiEvent // I:timer identifier
,DWORD dwTime // I:current system time
)
{
... Traitement du timer 1 ...
}
// --- Fonction de traitement du second timer
VOID CALLBACK Fonction2
(
HWND hWnd // I:handle to the window
,UINT uiMsg // I:WM_TIMER message
,UINT uiEvent // I:timer identifier
,DWORD dwTime // I:current system time
)
{
... Traitement du timer 2 ...
}
// --- Fonction de gestion des messages de la fenêtre
LRESULT CALLBACK WinProc
(
HWND hWnd // I:handle to the window
,UINT uiMsg // I:message to process
,WPARAM wParam // I:WPARAM parameter
,LPARAM lParam // I:LPARAM parameter
) // O:return code
{
static int iIDTimer1; // ID du timer 1
static int iIDTimer2; // ID du timer 2
switch (uiMsg)
{
// ----------------
// Créer la fenêtre
// ----------------
case WM_CREATE : // si c'est une fenêtre classique
case WM_INITDIALOG : // si c'est une boîte de dialogue
{
...
// --- Set the timers
iIDTimer1 = SetTimer(NULL,0,1000,Beep1); // toutes les 1s
iIDTimer2 = SetTimer(NULL,0,2000,Beep2); // toutes les 2s
}
return 0;
// ---------------------
// Quitter l'application
// ---------------------
case WM_DESTROY : // si c'est une fenêtre classique
case "quitter" dans WM_COMMAND : // si c'est une boîte de dialogue
{
...
// --- Tuer the timers
KillTimer(hWnd,iIDTimer1);
KillTimer(hWnd,iIDTimer2);
...
}
return 0;
}
// --- Retour du traitement par défaut
return DefWindowProc(hWnd,uiMsg,wParam,lParam);
}
Jean-François