- •Содержание
- •Аннотация
- •Техническое задание
- •2. Краткие теоретические сведения
- •2.1. Особенности создания приложений для oc семейства Windows
- •2.2. Краткая характеристика функций api
- •2.3. Краткая характеристика стандартной библиотеки классов
- •2.4. Краткая характеристика интегрированной среды разработки
- •3. Создание приложения
- •3.1. Состав и характеристики файлов проекта
- •3.2. Пользовательские классы и функции приложения
- •3.3Стандартные классы и функции приложения
- •5.2. Последовательность действий для запуска программы
- •5.3. Последовательность действий для выполнения всех требуемых по техническому заданию функций
- •Список литературы
Список литературы
Подбельский В.В. Язык Си++. - М: Финансы и статистика, 1996.
Финогенов К.Г. Прикладное программирование для Windows на Borland
С++. - Обнинск: Принтер, 1999
T.Сван. Программирование для Windows в Borland C++.- М: Бином, 1995. Ю.А.Щупак - Win32 API. Разработка приложений для Windows. -
СПб.: Питер, 2008.
Черкасова Н.И. Тексты лекций по дисциплине «Операционные системы»
для студентов специальности 220100 дневного обучения, часть 2,.- М.,
РИО МГТУ ГА, 2017.
Язык программирования С++ http://cppstudio.com
Форум программистов и сисадминов Киберфорум www.cyberforum.ru
Е.А. Конова, Г.А. Поллак. Алгоритмы и программы. Язык С++: учебное пособие. – 4-е изд., стер. – Санкт-Петербург: Лань, 2019.
ЯЗЫК C++ И ПРОГРАММИРОВАНИЕ НА НЁМ Учебное пособие Корректура Д.В. Заремба Компьютерная верстка Д.В. Сотникова Дизайн обложки Т.В. Буланова, 2021
Приложение 1
Листинг программы
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <string>
#include <vector>
#include <map>
#include <fstream>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <codecvt>
#include "commctrl.h"
#define OnYearChoose_Clicked 100
#define OnAboutProgram_Clicked 200
#define OnExitProgram_Clicked 201
#define IDC_COMBOBOX 300
struct operatorData {
std::string name;
int abonent;
COLORREF color;
};
// Функция для чтения данных абонентов из файла
std::map<int, std::vector<operatorData>> readabonentData(const std::string& filename);
// Обработчик сообщений окна
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
// Функция для рисования гистограммы
void DrawHistogram(HWND hwnd, const std::vector<operatorData>& data, int year);
// Функция для очистки окна
void ClearWindow(HWND hwnd);
// Главная функция приложения Win32
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
// Имя класса окна
const wchar_t CLASS_NAME[] = L"operatorabonentHistogram";
// Структура, описывающая класс окна
WNDCLASS wc = {};
// Указываем функцию обработки сообщений окна
wc.lpfnWndProc = WindowProc;
// Указываем экземпляр приложения
wc.hInstance = hInstance;
// Указываем имя класса окна
wc.lpszClassName = CLASS_NAME;
std::getline(ss, color);
unsigned int r, g, b;
sscanf(color.c_str(), "#%02X%02X%02X", &r, &g, &b);
COLORREF operatorColor = RGB(r, g, b);
data[year].push_back({ operatorName, abonent, operatorColor });
}
file.close();
return data;
}
// Функция для рисования гистограммы
void DrawHistogram(HWND hwnd, const std::vector<operatorData>& data, int year) {
if (data.empty()) {
return;
}
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
RECT rect;
GetClientRect(hwnd, &rect);
int barWidth = rect.right / data.size();
int maxHeight = rect.bottom - 50;
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
int max_abonent = std::max_element(data.begin(), data.end(),
[](const operatorData& a, const operatorData& b) {
return a.abonent < b.abonent;
})->abonent;
for (size_t i = 0; i < data.size(); i++) {
const auto& operatorr = data[i];
HBRUSH brush = CreateSolidBrush(operatorr.color);
HBRUSH oldBrush = static_cast<HBRUSH>(SelectObject(hdc, brush));
int barHeight = static_cast<int>(operatorr.abonent * maxHeight / max_abonent);
Rectangle(hdc, i * barWidth, rect.bottom - barHeight, (i + 1) * barWidth, rect.bottom);
SelectObject(hdc, oldBrush);
DeleteObject(brush);
SetTextColor(hdc, RGB(0, 0, 0));
SetBkMode(hdc, TRANSPARENT);
std::wstring wide_operatorr_name = converter.from_bytes(operatorr.name);
TextOutW(hdc, i * barWidth, rect.bottom - barHeight - 20, wide_operatorr_name.c_str(), wide_operatorr_name.size());
}
// Вывод текущего отображаемого года
SetTextColor(hdc, RGB(0, 0, 0));
SetBkMode(hdc, TRANSPARENT);
std::wstring yearText = L"Year: " + std::to_wstring(year);
TextOutW(hdc, 240, rect.bottom - 440, yearText.c_str(), yearText.size());
EndPaint(hwnd, &ps);
}
// Функция создания меню
void CreateMenu(HWND hwnd)
{
HMENU hRootMenu = CreateMenu();
HMENU hSubMenu = CreateMenu();
AppendMenu(hSubMenu, MF_STRING, OnAboutProgram_Clicked, L"О программе");
AppendMenu(hSubMenu, MF_SEPARATOR, 0, NULL);
AppendMenu(hSubMenu, MF_STRING, OnExitProgram_Clicked, L"Выход");
AppendMenu(hRootMenu, MF_POPUP, (UINT_PTR)hSubMenu, L"Меню");
SetMenu(hwnd, hRootMenu);
}
Приложение 2. Алгоритм функция для рисования гистограммы
Рисунок 12. Алгоритм функция для рисования гистограммы
Рисунок 12.1. Продолжение алгоритма функция для рисования гистограммы
