Untitled
7-8unknown
c_cpp
2 years ago
7.9 kB
7
Indexable
#define XMAX 800//Размер окна по горизонтали #define YMAX 400//Размер окна по вертикали #include <windows.h> #include <windowsx.h> /*Прототипы используемых в программе функций*/ LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); BOOL OnCreate(HWND, LPCREATESTRUCT);//Прототип функции OnCreate void OnPaint(HWND);//Прототип функции OnPaint void OnDestroy(HWND);//Прототип функции OnDestroy /*Глобальные переменные, доступные всем функциям*/ HFONT hFont1, hFont2, hFont3, hFont4;//Четыре фонта HBRUSH hBrush;//Кисть /*Главная функция WinMain */ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int) { char szClassName[] = "MainWindow"; char szTitle[] = "Программа 4"; 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(WHITE_BRUSH); wc.lpszClassName = szClassName; RegisterClass(&wc); /* Создание главного окна и отображение его на экране */ HWND hwnd = CreateWindow(szClassName, szTitle, WS_OVERLAPPEDWINDOW, 100, 80, XMAX, YMAX, HWND_DESKTOP, NULL, hInst, NULL); ShowWindow(hwnd, SW_SHOWNORMAL); /* Организация цикла обнаружения сообщений */ while (GetMessage(&Msg, NULL, 0, 0)) DispatchMessage(&Msg); return 0; } /* Оконная функция WndProc главного окна */ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { HANDLE_MSG(hwnd, WM_CREATE, OnCreate); HANDLE_MSG(hwnd, WM_PAINT, OnPaint);//Обработка сообщения WM_PAINT HANDLE_MSG(hwnd, WM_DESTROY, OnDestroy);//Обработка сообщения WM_DESTROY default: return(DefWindowProc(hwnd, msg, wParam, lParam)); } } /*Функция обработки сообщения WM_CREATE*/ BOOL OnCreate(HWND, LPCREATESTRUCT) { char lpszFace1[] = "Courier New Cyr";//Имя Windows для шрифта char lpszFace2[] = "Times New Roman Cyr";//Имя Windows для шрифта char lpszFace3[] = "Arial Cyr";//Имя Windows для шрифта LOGFONT lf;//Структура LOGFONT для создания шрифтов ZeroMemory(&lf, sizeof(lf));//Обнуление структуры (обязательно) /*Создадим шрифт 1 (для заголовка)*/ lf.lfHeight = 26;//Размер lf.lfUnderline = 1;//Подчеркивание strcpy_s(lf.lfFaceName, lpszFace1);//Копируем имя шрифта hFont1 = CreateFontIndirect(&lf);//Создание шрифта /*Создадим шрифт 2 (для подзаголовка и цифр лет)*/ lf.lfHeight = 21;//Размер lf.lfUnderline = 0;//Подчеркивание lf.lfItalic = 0;//Курсив strcpy_s(lf.lfFaceName, lpszFace2);//Копируем имя шрифта hFont2 = CreateFontIndirect(&lf);//Создание шрифта /*Создадим шрифт 3 (для оси y)*/ lf.lfHeight = 19;//Размер lf.lfItalic = 0;//Отмена курсива lf.lfEscapement = 900;//Угол наклона 90 градусов strcpy_s(lf.lfFaceName, lpszFace3);//Копируем имя шрифта hFont3 = CreateFontIndirect(&lf);//Создание шрифта /*Создадим шрифт 4 (для шкалы)*/ lf.lfHeight = 18;//Размер lf.lfEscapement = 0;//Отмена угла наклона hFont4 = CreateFontIndirect(&lf);//Создание шрифта /*Создадим Оранжевый кисть*/ hBrush = CreateSolidBrush(RGB(255, 165, 0)); return TRUE; } /*Функция обработки сообщения WM_DESTROY*/ void OnDestroy(HWND) { PostQuitMessage(0); } /*Функция обработки события WM_PAINT*/ void OnPaint(HWND hwnd) { RECT r; //Прямоугольник для надписей PAINTSTRUCT ps;//Структура, требуемая для рисования в рабочей области TEXTMETRIC tm; //Для получения характеристик шрифтов char szMainTitle[] = "Факультет математики и информационных технологий (ФМиИТ)";//Заголовок char szSubTitle[] = "Выпуск студентов по годам";//Подзаголовок char szYAxes[] = "Выпускники ВУЗ'a";//Надпись по оси y const char* szYears[10] = { "2013","2014","2015","2016","2017", "2018","2019","2020","2021","2022" };//диаграммой const char* szScale[3] = { "1000","500","0" };//Шкала int nData[10] = { 80,15,22,45,60,65,70,65,59,40 };//Данные для диаграммы HDC hdc = BeginPaint(hwnd, &ps);//Получение контекста устройства /*Нарисуем большой прямоугольник*/ Rectangle(hdc, 90, 120, 550, 320); /*Выведем строку заголовка*/ HFONT hOldFont = SelectFont(hdc, hFont1);//Выберем в контекст шрифт 1 SetTextColor(hdc, RGB(0, 0, 0));//Установим черный цвет GetTextMetrics(hdc, &tm);//Получим метрики текста r.left = 0;//Задание координат прямоугольника, в который r.top = 10;//будет выводиться текст заголовка r.right = XMAX; r.bottom = r.top + tm.tmHeight;//Высоту прямоугольника выберем по высоте шрифта DrawText(hdc, "Факультет математики и информационных технологий (ФМиИТ)", strlen(szMainTitle), &r, DT_CENTER);//Выведен текст /*Выведем строку подзаголовка*/ SetTextColor(hdc, RGB(255, 160, 0));//Установим Оранжевый цвет SelectFont(hdc, hFont2);//Выберем шрифт 2 GetTextMetrics(hdc, &tm);//Получим метрики текста r.left = 0;//Задание координат прямоугольника для r.top = r.bottom + 5;//строки с подзаголовком r.right = XMAX; r.bottom += tm.tmHeight + 5;//Высоту прямоугольника выберем по высоте шрифта DrawText(hdc, "Выпуск студентов по годам", strlen(szSubTitle), &r, DT_CENTER);//Выведен текст /*Выведем строку лет*/ for (int i = 0; i < 10; i++) TextOut(hdc, 100 + i * 45, 330, szYears[i], strlen(szYears[i])); /*Выведем вертикальную строку по оси y*/ SelectFont(hdc, hFont3);//Выберем шрифт 3 (вертикальный) SetTextColor(hdc, RGB(255, 160, 0));//Установим Умбра “жжёная” цвет TextOut(hdc, 30, 320, szYAxes, strlen(szYAxes));//Выведем надпись SelectFont(hdc, hFont4);//Выберем шрифт 4 for (int j = 2; j >= 0; j--)//Выведем значения масштаба TextOut(hdc, 60, 110 + j * 100, szScale[j], strlen(szScale[j])); SelectFont(hdc, hOldFont); /*Нарисуем столбцовую диаграмму*/ SelectBrush(hdc, hBrush);//Выберем кисть в контекст for (int k = 0; k < 10; k++)//Выведем столбцы диаграммы Rectangle(hdc, 100 + k * 45, 320 - nData[k] * 2, 100 + k * 45 + 30, 320); EndPaint(hwnd, &ps);//Освобождение контекста устройства }
Editor is loading...