1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| // STATIC window control ID pour une message box
#define ID_MSGBOX_STATIC_TEXT 0x0000ffff
//////////////////////////////////////////////////////////////////////////////
VOID WINAPI MsgBoxTimeout(PVOID pvContext, BOOLEAN fTimeout) {
HWND hwnd = FindWindow(NULL, Form1->szCaption.c_str());
if (hwnd != NULL)
{
// La fenêtre existe; met à jour le temps restant
TCHAR sz[100];
wsprintf(sz, TEXT("Vous avez %d secondes pour répondre"), Form1->nSecLeft--);
SetDlgItemText(hwnd, ID_MSGBOX_STATIC_TEXT, sz);
if (Form1->nSecLeft == 0)
{
// Le temps est expiré. Ferme la boite de dialogue
EndDialog(hwnd, IDOK);
}
} else
{
// La fenêtre n'existe pas encore
// On re-essaiera dans une seconde
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
nSecLeft = 10; // délai max
szCaption = "MessageBox avec time_out"; // titre de la fenêtre
// crée un timer de 1 seconde
HANDLE hTimerQTimer;
CreateTimerQueueTimer(&hTimerQTimer, NULL, MsgBoxTimeout, NULL,
1000, 1000, 0);
// Affiche la MessageBox
MessageBox(NULL, "Vous avez 10 secondes pour répondre",
szCaption.c_str(), MB_OK);
// Annule le Timer et supprime la queue correspondante
DeleteTimerQueueTimer(NULL, hTimerQTimer, NULL);
// Affiche un message pour indiquer si le timer a expiré ou non
MessageBox(NULL,
(nSecLeft == 0) ? "Temps expiré" : "L'utilisateur a répondu",
"Résultat", MB_OK);
}
//--------------------------------------------------------------------------- |
Partager