Создадим простенькие часы на Си:
Пример:
Код:
#include <windows.h> #include <stdio.h> #include <time.h> #define ID_TIMER 100 // Наш таймер, т.е. идентификатор таймера HWND hwndTime; SYSTEMTIME currtm; char buf[12]; LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { case WM_TIMER: // Прерывание от таймера if(wParam == ID_TIMER) { GetLocalTime(&currtm); // Получаем локальное время sprintf(buf, "%02d:%02d:%02d", currtm.wHour, currtm.wMinute, currtm.wSecond); // Записываем в строку SetWindowText(hwndTime, buf); // Выводим в лейбл/статик } break; case WM_CREATE: hwndTime = CreateWindow("STATIC","", WS_CHILD | WS_VISIBLE, 10, 10, 100, 20, hwnd, NULL, NULL, NULL); // Создаём лейбл SetTimer(hwnd, ID_TIMER, 1000, (TIMERPROC) NULL); // Устанавливаем таймер, который прерывается каждыйе 1000 мсек. break; case WM_DESTROY: { KillTimer(hwnd, ID_TIMER); // Удаляем таймер PostQuitMessage(0); // Выходим break; } default: return DefWindowProc(hwnd, Message, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hwnd; MSG msg; memset(&wc,0,sizeof(wc)); wc.cbSize = sizeof(WNDCLASSEX); wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszClassName = "WindowClass"; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&wc)) { MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK); return 0; } hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Clock",WS_VISIBLE|WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, NULL,NULL,hInstance,NULL); if(hwnd == NULL) { MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK); return 0; } while(GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
Результат работы программы