11-TimedMsgBox

来源:互联网 发布:东京物语知乎 编辑:程序博客网 时间:2024/06/05 17:43
 
/******************************************************************************Module:  TimedMsgBox.cppNotices: Copyright (c) 2000 Jeffrey Richter******************************************************************************/#include "..\CmnHdr.h"     /* See Appendix A. */#include <tchar.h>//////////////////////////////////////////////////////////////////////////////// The caption of our message boxTCHAR g_szCaption[] = TEXT("Timed Message Box");// How many seconds we'll display the message boxint g_nSecLeft = 0;// This is STATIC window control ID for a message box#define ID_MSGBOX_STATIC_TEXT    0x0000ffff//控件得值為65535即0xFFFF//////////////////////////////////////////////////////////////////////////////VOID WINAPI MsgBoxTimeout(PVOID pvContext, BOOLEAN fTimeout) {   // NOTE: Due to a thread race condition, it is possible (but very unlikely)   // that the message box will not be created when we get here.   HWND hwnd = FindWindow(NULL, g_szCaption);   if (hwnd != NULL)    {      // The window does exist; update the time remaining.      TCHAR sz[100];      wsprintf(sz, TEXT("You have %d seconds to respond"), g_nSecLeft--);      SetDlgItemText(hwnd, ID_MSGBOX_STATIC_TEXT, sz);      if (g_nSecLeft == 0)   {         // The time is up; force the message box to exit.         EndDialog(hwnd, IDOK);      }   }    else    {      // The window does not exist yet; do nothing this time.      // We'll try again in another second.   }}//////////////////////////////////////////////////////////////////////////////int WINAPI _tWinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {   chWindows9xNotAllowed();   // How many seconds we'll give the user to respond   g_nSecLeft = 10;   // Create a multishot 1 second timer that begins firing after 1 second.   HANDLE hTimerQTimer;   CreateTimerQueueTimer(&hTimerQTimer, NULL, MsgBoxTimeout, NULL, 1000, 1000, 0);   // Display the message box   MessageBox(NULL, TEXT("You have 10 seconds to respond"), g_szCaption, MB_OK);   // Cancel the timer & delete the timer queue   DeleteTimerQueueTimer(NULL, hTimerQTimer, NULL);   // Let us know if the user responded or if we timed-out.   MessageBox(NULL, (g_nSecLeft == 0) ? TEXT("Timeout") : TEXT("User responded"), TEXT("Result"), MB_OK);   return(0);}//////////////////////////////// End of File /////////////////////////////////

原创粉丝点击