11-12
unknown
c_cpp
2 years ago
5.3 kB
3
Indexable
#include <windows.h> #include <windowsx.h> #include "Timer.h" /*Глобальные переменные*/ char szCurrentTime[40];//Для формирования выводимой строки HWND hwndMain; /*Главная функция WinMain*/ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int) { char szClassName[] = "MainWindow"; char szTitle[] = "Текущее время"; MSG Msg; WNDCLASS wc; /* Регистрация класса главного окна */ ZeroMemory(&wc, sizeof(wc)); wc.lpfnWndProc = WndProc; wc.hInstance = hInst; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = GetStockBrush(LTGRAY_BRUSH); wc.lpszClassName = szClassName; RegisterClass(&wc); /* Создание главного окна и отображение его на экране */ hwndMain = CreateWindowEx(WS_EX_TOPMOST, szClassName, szTitle, WS_CAPTION | WS_SYSMENU, 0, 0, XSIZE, YSIZE, HWND_DESKTOP, NULL, hInst, NULL); ShowWindow(hwndMain, SW_SHOWNORMAL); /* Организация цикла обнаружения сообщений */ while (GetMessage(&Msg, NULL, 0, 0)) DispatchMessage(&Msg); return 0; } /* Оконная функция главного окна */ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { HANDLE_MSG(hwnd, WM_CREATE, OnCreate); HANDLE_MSG(hwnd, WM_TIMER, OnTimer); HANDLE_MSG(hwnd, WM_PAINT, OnPaint); HANDLE_MSG(hwnd, WM_GETMINMAXINFO, OnGetMinMaxInfo); HANDLE_MSG(hwnd, WM_DESTROY, OnDestroy); default: return(DefWindowProc(hwnd, msg, wParam, lParam)); } } /*Функция обработки сообщения и создания главного окна*/ BOOL OnCreate(HWND hwnd, LPCREATESTRUCT) { OutDateTime();//Первый вывод текущего времени SetTimer(hwnd, 1, 1000, NULL);//Установка таймера с периодом 1 с return TRUE; } /*Функция обработки события WM_PAINT главного окна*/ void OnPaint(HWND hwnd) { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); SetBkMode(hdc, TRANSPARENT);//Прозрачный фон под текстом TextOut(hdc, 5, 0, szCurrentTime, strlen(szCurrentTime));//Вывод строки EndPaint(hwnd, &ps);//Освобождение контекста устройства } /*Функция обработки сообщения WM_GETMINMAXINFO*/ void OnGetMinMaxInfo(HWND, LPMINMAXINFO lpmmi) { lpmmi->ptMinTrackSize.x = XSIZE;//Минимальный lpmmi->ptMinTrackSize.y = YSIZE;//и максимальный lpmmi->ptMaxTrackSize.x = XSIZE;//размеры главного lpmmi->ptMaxTrackSize.y = YSIZE;//окна совпадают } /*Функция обработки сообщения WM_DESTROY*/ void OnDestroy(HWND hwnd) { KillTimer(hwnd, 1);//Перед завершением уничтожим таймер PostQuitMessage(0); } /*Функция обработки сообщений WM_TIMER*/ void OnTimer(HWND, UINT) { } /*Функция получения текущего времени и преобразования его в символы*/ void OutDateTime() { const char* szDay[7] = { "Вс","Пн","Вт","Ср","Чт","Пт","Сб", }; const char* szMonth[13] = { "","Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек" }; char szT[20]; SYSTEMTIME SystemTime;//Структура для получения системного времени GetLocalTime(&SystemTime);//Получим текущее местное время strcat_s(szCurrentTime, szDay[SystemTime.wDayOfWeek]);//День недели strcat_s(szCurrentTime, " ");//Разделяющий пробел strcat_s(szCurrentTime, szMonth[SystemTime.wMonth]);//Месяц strcat_s(szCurrentTime, " ");//Разделяющий пробел wsprintf(szT, "%d", SystemTime.wDay);//Дата в символы strcat_s(szCurrentTime, szT);//Добавим ее strcat_s(szCurrentTime, " ");//Разделяющий пробел wsprintf(szT, "%d", SystemTime.wYear);//Год в символы strcat_s(szCurrentTime, szT);//Добавим его strcat_s(szCurrentTime, "---");//Разделяющие символы wsprintf(szT, "%d", SystemTime.wHour);//Часы в символы strcat_s(szCurrentTime, szT);//Добавим их strcat_s(szCurrentTime, ":");//Разделяющее двоеточие wsprintf(szT, "%d", SystemTime.wMinute);//Минуты в символы strcat_s(szCurrentTime, szT);//Добавим их strcat_s(szCurrentTime, ":");//Разделяющее двоеточие wsprintf(szT, "%d", SystemTime.wSecond);//Секунды в символы strcat_s(szCurrentTime, szT);//Добавим их InvalidateRect(hwndMain, NULL, TRUE);//перерисовка окна }
Editor is loading...