Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
.docx
Скачиваний:
8
Добавлен:
30.10.2018
Размер:
824.42 Кб
Скачать

19. Створити програму у Windows (Win32 api), яка забезпечує роботу з таймером.

/*Файл 7-1.Н*/

#define XSIZE 205//Горизонтальный размер главного окна

#define YSIZE 45//Вертикальный размер главного окна

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

BOOL OnCreate(HWND,LPCREATESTRUCT);

void OnPaint(HWND);

void OnTimer(HWND,UINT);

void OnGetMinMaxInfotHWND,LPMINMAXINFO);

void OnDestroy(HWND);

void OutDateTime(void);

/*Файл 7-l.cpp*/

#include <windows.h>

#include <windowsx.h>

#include "7-1.h"

/*Глобальные переменные*/

char szCurrentTime[40];//Для формирования выводимой строки

HWND hwndMain;

/*Главная функция WlnMaln*/

int WINAPI WinMain(HINSTANCE hlnst,HINSTANCE,LPSTR,int){

char szClassName[]="MainWindow";

char szTitle[]="Текущее время";

MSG msg;

WNDCLASS we; /

ZeroMemory(&wc,sizeof(we));

we .lpfnWndProc=WndProc;

we.hlnstance=hlnst;

wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);

wc.hCursor=LoadCursor(NULL,IDC_ARROW);

wc.hbrBackground=GetStockBrush(LTGRAY_BRUSH) ,- / / Светло-серый фон окна

we.lpszClassName=szClassName;

RegisterClass(&wc);//Регистрируем класс главного окна

hwndMain=CreateWindowEx(WS_EX_TOPMOST,szClassName,szTitle,//Создаем окно

WS_CAPTION|WS_SYSMENU,0,0,XSIZE,YSIZE,HWND_DESKTOP,NULL,hlnst,NULL);

ShowWindow(hwndMain,SW_SHOWNORMAL);//Показываем окно

while(GetMessage(&msg,NULL,0,0))11 Цикл

DispatchMessage (Scinsg ) ; /1 обработки сообщений

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));11Вывод строки

EndPaint(hwnd,&ps);

}

/*функция обработки сообщения WM_GETMINMAXINFO главного окна*/

void OnGetMinMaxInfo(HWND,LPMINMAXINFO lpmmi){

lpmmi->ptMinTrackSize.x=XSIZE;//Минимальный

lpmmi->ptMinTrackSize.y=YSIZE,-11и максимальный

lpmmi -^ptMaxTrackSize.x=XSIZE;//размеры главного

lpmmi->ptMaxTrackSize.y=YSIZE;11 окна совпадают

}

/**ункция обработки сообщения WM_DESTROY главного окна*/

void OnDestroy(HWND hwnd){

KillTimer(hwnd,1);//Перед завершением уничтожим таймер

PostQuitMessage (0);

}

/*функция обработки сообщений WM_TIMER*/

void OnTimer(HWND.UINT){

OutDateTime();//Периодический вывод текущего времени

}

/**ункция получения текущего времени и преобразования его в символы*/

void OutDateTime(){

char* szDay[7]=("Век","Пнд","Втр","Ср","Чтв","Птн","Суб"};

char* szMonth[13]={"","Янв","Февр","Март","Апр","Май","Июнь",

"Июль","Авг","Сент","Окт","Нояб","Дек");

char szT[20];

SYSTEMTIME SystemTime;//Структура для получения системного времени

GetLocalTime (ScSystemTime) ; //Получим текущее местное время

strcpy(szCurrentTime,szDay[SystemTime.wDayOfWeek]);//День недели

strcat(szCurrentTime," ");//Разделяющий пробел

strcat(szCurrentTime,szMonth[SystemTime.wMonth]);//Месяц

strcat(szCurrentTime," ")}//Разделяющий пробел

wsprintf(szT,"%d",SystemTime.wDay);//Дата в символы

strcat(szCurrentTime,szT);//Добавим ее

strcat(szCurrentTime," ");//Разделяющий пробел

wsprintf (szT, "%d", SystemTime.wYear) , - //Год в символы

strcat(szCurrentTime,szT);//Добавим его

strcat(szCurrentTime," ">;//Разделяющие символы

wsprintf (szT, "%d",'SystemTime.wHour) г I/Часы в символы

strcat (szCurrentTime, szT) , - //Добавим их

strcat(szCurrentTime,":");//Разделяющее двоеточие

wsprintf(szT,"%d",SystemTime.wMinute);//Минуты в символы

strcat(szCurrentTime,szT);//Добавим их

strcat (szCurrentTime, " : ") , - //Разделяющее двоеточие

wsprintf(szT,"%d",SystemTime.wSecond);//Секунды в символы

strcat(szCurrentTime,szT);//Добавим их

InvalidateRect(hwndMain,NULL,TRUE);//Перерисовка окна

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]