1 /*------------------------------------- 2 BEEPER2.C -- Timer Demo Program No.1 3 (c) Charles Petzold, 1998 4 -------------------------------------*/ 5 6 #include <Windows.h> 7 8 #define ID_TIMER 1 9 10 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 11 VOID CALLBACK TimerPorc(HWND, UINT, UINT, DWORD); 12 13 int WINAPI WinMain( __in HINSTANCE hInstance 14 , __in_opt HINSTANCE hPrevInstance 15 , __in LPSTR lpCmdLine 16 , __in int nShowCmd ) 17 { 18 static TCHAR szAppName[] = TEXT("Bepper2"); 19 HWND hwnd; 20 MSG msg; 21 WNDCLASS wndclass; 22 23 wndclass.style = CS_HREDRAW | CS_VREDRAW; 24 wndclass.lpfnWndProc = WndProc; 25 wndclass.cbClsExtra = 0; 26 wndclass.cbWndExtra = 0; 27 wndclass.hInstance = hInstance; 28 wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); 29 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); 30 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 31 wndclass.lpszMenuName = NULL; 32 wndclass.lpszClassName = szAppName; 33 34 if (!RegisterClass(&wndclass)) 35 { 36 MessageBox(NULL, TEXT("Program requires Windows NT!") 37 , szAppName, MB_ICONERROR); 38 return 0; 39 } 40 41 hwnd = CreateWindow(szAppName, TEXT("Beeper1 Timer Demo") 42 , WS_OVERLAPPEDWINDOW 43 , CW_USEDEFAULT, CW_USEDEFAULT 44 , CW_USEDEFAULT, CW_USEDEFAULT 45 , NULL, NULL, hInstance, NULL); 46 47 ShowWindow(hwnd, nShowCmd); 48 UpdateWindow(hwnd); 49 50 while (GetMessage(&msg, NULL, 0, 0)) 51 { 52 TranslateMessage(&msg); 53 DispatchMessage(&msg); 54 } 55 56 return msg.wParam; 57 } 58 59 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 60 { 61 switch (message) 62 { 63 case WM_CREATE: 64 SetTimer(hwnd, ID_TIMER, 1000, TimerPorc); 65 return 0; 66 67 case WM_DESTROY: 68 KillTimer(hwnd, ID_TIMER); 69 PostQuitMessage(0); 70 return 0; 71 } 72 73 return DefWindowProc(hwnd, message, wParam, lParam); 74 } 75 76 VOID CALLBACK TimerPorc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime) 77 { 78 static BOOL fFlipFlop = FALSE; 79 HBRUSH hBrush; 80 HDC hdc; 81 RECT rc; 82 83 MessageBeep(-1); 84 fFlipFlop = !fFlipFlop; 85 86 GetClientRect(hwnd, &rc); 87 88 hdc = GetDC(hwnd); 89 hBrush = CreateSolidBrush(fFlipFlop ? RGB(255, 0, 0) : RGB(0, 0, 255)); 90 FillRect(hdc, &rc, hBrush); 91 ReleaseDC(hwnd, hdc); 92 DeleteObject(hBrush); 93 }