11-12
unknown
c_cpp
2 years ago
5.3 kB
4
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...