ðoạn chương trình sau cũng khai báo sử dụng một bộñịnh thời gian, nhưng khai báo trực tiếp, tức là khi hết thời gian chờ thay vì truyền thông ñiệp WM_TIMER thì Windows gọi hàm
TimerProc thực hiện.
Chương trình khi thực thi sẽ xuất ra một dạng ñồng hồñiện tử theo dạng : giờ : phút :giây.
#include <time.h> #include "stdio.h" #define IDT_TIMER1 1
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM
lParam)
{
PAINTSTRUCT ps; HDC hdc;
/* Khai báo biến lưu các giá trị không gian*/
struct tm *newtime; time_t CurTime; TCHAR str [255]; RECT rc;
/* Biến LOGFONT ñể tạo font mới*/
LOGFONT lf; HFONT oldFont, font;
COLORREF color = RGB (255, 0, 0), oldColor; switch ( message )
{
case WM_CREATE:
/* khởi tạo bộñịnh thời gian, và khai báo hàm xử lý Timer*/
SetTimer ( hWnd, IDT_TIMER1, 1000, ( TIMERPROC ) TimerProc ); break; case WM_PAINT: hdc = BeginPaint ( hWnd, &ps ); /* Lấy giờñồng hồ hệ thống*/ time( &CurTime ); Tech24.vn
newtime = localtime ( &CurTime ); GetClientRect ( hWnd, &rc );
/* Tạo chuỗi xuất ra màn hình*/
sprintf(str,"Gio hien tai : %d gio: %d phut: %d giay", newtime->tm_hour,newtime->tm_min, newtime-
>tm_sec);
/* Thiết lập màu kí tự xuất*/
oldColor = SetTextColor ( hdc, color );
/* Tạo font riêng ñể dùng*/
memset ( &lf, 0, sizeof ( LOGFONT ) );
lf.lfHeight = 50;
strcpy ( lf.lfFaceName, "Tahoma" ); font = CreateFontIndirect ( &lf );
oldFont = ( HFONT ) SelectObject ( hdc,font );
/* Xuất ra màn hình*/
DrawText ( hdc, str, strlen(str), &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE );
/* Lấy lại các giá trị mặc ñịnh*/ SetTextColor ( hdc,oldColor ); SelectObject ( hdc,oldFont ); DeleteObject ( font ); EndPaint ( hWnd, &ps ); break; case WM_DESTROY: PostQuitMessage ( 0 ); break; default:
return DefWindowProc ( hWnd, message, wParam, lParam ); }
return 0; }
/* Hàm xử lý của Timer*/
VOID CALLBACK TimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) {
/* Hàm này ñơn giản yêu cầu tô lại vùng làm việc*/
RECT rc;
GetClientRect ( hwnd, &rc ); InvalidateRect ( hwnd, &rc, TRUE ); }