www.pudn.com > BEEPER2.rar > BEEPER2.C


/*---------------------------------------- 
   BEEPER2.C -- Timer Demo Program No. 2 
                (c) Charles Petzold, 1996 
  ----------------------------------------*/ 
 
#include  
 
#define ID_TIMER    1 
 
LRESULT CALLBACK WndProc   (HWND, UINT, WPARAM, LPARAM) ; 
VOID    CALLBACK TimerProc (HWND, UINT, UINT,   DWORD ) ; 
 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                    PSTR szCmdLine, int iCmdShow) 
     { 
     static char szAppName[] = "Beeper2" ; 
     HWND        hwnd ; 
     MSG         msg ; 
     WNDCLASSEX  wndclass ; 
 
	 wndclass.cbSize        = sizeof (wndclass) ; 
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ; 
     wndclass.lpfnWndProc   = WndProc ; 
     wndclass.cbClsExtra    = 0 ; 
     wndclass.cbWndExtra    = 0 ; 
     wndclass.hInstance     = hInstance ; 
     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ; 
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ; 
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; 
     wndclass.lpszMenuName  = NULL ; 
     wndclass.lpszClassName = szAppName ; 
	 wndclass.hIconSm       = LoadIcon (NULL, IDI_APPLICATION) ; 
 
     RegisterClassEx (&wndclass) ; 
 
     hwnd = CreateWindow (szAppName, "Beeper2 Timer Demo", 
                          WS_OVERLAPPEDWINDOW, 
                          CW_USEDEFAULT, CW_USEDEFAULT, 
                          CW_USEDEFAULT, CW_USEDEFAULT, 
                          NULL, NULL, hInstance, NULL) ; 
 
     while (!SetTimer (hwnd, ID_TIMER, 1000, (TIMERPROC) TimerProc)) 
          if (IDCANCEL == MessageBox (hwnd, 
                              "Too many clocks or timers!", szAppName, 
                              MB_ICONEXCLAMATION | MB_RETRYCANCEL)) 
               return FALSE ; 
 
     ShowWindow (hwnd, iCmdShow) ; 
     UpdateWindow (hwnd) ; 
 
     while (GetMessage (&msg, NULL, 0, 0)) 
          { 
          TranslateMessage (&msg) ; 
          DispatchMessage (&msg) ; 
          } 
     return msg.wParam ; 
     } 
 
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) 
     { 
     switch (iMsg) 
          { 
          case WM_DESTROY : 
               KillTimer (hwnd, ID_TIMER) ; 
               PostQuitMessage (0) ; 
               return 0 ; 
          } 
     return DefWindowProc (hwnd, iMsg, wParam, lParam) ; 
     } 
 
VOID CALLBACK TimerProc (HWND hwnd, UINT iMsg, UINT iTimerID, DWORD dwTime) 
     { 
     static BOOL fFlipFlop = FALSE ; 
     HBRUSH      hBrush ; 
     HDC         hdc ; 
     RECT        rc ; 
 
     MessageBeep (0) ; 
     fFlipFlop = !fFlipFlop ; 
 
     GetClientRect (hwnd, &rc) ; 
 
     hdc = GetDC (hwnd) ; 
     hBrush = CreateSolidBrush (fFlipFlop ? RGB(255,0,0) : RGB(0,0,255)) ; 
 
     FillRect (hdc, &rc, hBrush) ; 
     ReleaseDC (hwnd, hdc) ; 
     DeleteObject (hBrush) ; 
     }