Untitled
9 10unknown
c_cpp
3 years ago
13 kB
13
Indexable
#include <windows.h>
#include <windowsx.h>
#include "menu.h"
HPEN hBlackPen, hOrangePen, hYellowPen, hOblakaPen, hSunPen;//Дескриптор новых перьев
HBRUSH hNizBrush, hLeftBrush, hRightBrush, hBrush, hYellowBrush, hOrangeBrush, hIlumBrush, hOblakaBrush, hSunBrush, hSkyBrush, hBlueBrush, hGreenBrush;
HFONT hFont1, hFont2, hFont3, hFont4;//Четыре фонта
int sw;
/*Главная функция WinMain */
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
char szClassName[] = "MainWindow";
char szTitle[] = "Программа 2";
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.lpszMenuName = "Main";
wc.lpszClassName = szClassName;
RegisterClass(&wc);
/* Создание главного окна и отображение его на экране */
HWND hwnd = CreateWindow(szClassName, szTitle,
WS_OVERLAPPEDWINDOW, 100, 100, 625, 475,
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_COMMAND, OnCommand);
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));
}
}
BOOL OnCreate(HWND, LPCREATESTRUCT)
{
hBlueBrush = CreateSolidBrush(RGB(100, 100, 255));
hGreenBrush = CreateSolidBrush(RGB(100, 255, 100));
hBlackPen = CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
hYellowPen = CreatePen(PS_SOLID, 3, RGB(255, 255, 0));
hOrangePen = CreatePen(PS_SOLID, 2, RGB(255, 165, 0));
hOblakaPen = CreatePen(PS_SOLID, 3, RGB(255, 255, 255));
hSunPen = CreatePen(PS_SOLID, 3, RGB(255, 255, 0));
//Создадим новые кисти
hNizBrush = CreateSolidBrush(RGB(255, 222, 183));
hLeftBrush = CreateSolidBrush(RGB(0, 255, 255));
hRightBrush = CreateSolidBrush(RGB(255, 0, 0));
hOrangeBrush = CreateSolidBrush(RGB(255, 165, 0));
hIlumBrush = CreateSolidBrush(RGB(70, 130, 180));
hYellowBrush = CreateSolidBrush(RGB(255, 255, 0));
hOblakaBrush = CreateSolidBrush(RGB(255, 255, 255));
hSunBrush = CreateSolidBrush(RGB(255, 255, 0));
hSkyBrush = CreateSolidBrush(RGB(135, 206, 250));
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;
}
void OnCommand(HWND hwnd, int id, HWND, UINT)
{
switch (id) {
case MI_BLUE:
sw = 1;
InvalidateRect(hwnd, NULL, TRUE);
break;
case MI_GREEN:
sw = 2;
InvalidateRect(hwnd, NULL, TRUE);
break;
case MI_EXIT:
DestroyWindow(hwnd);
}
}
/*Функция обработки сообщения WM_PAINT*/
void OnDestroy(HWND)
{
PostQuitMessage(0);
}
/*Функция обработки события WM_PAINT*/
void OnPaint(HWND hwnd)
{
PAINTSTRUCT ps;//Структура, требуемая для рисования в рабочей области
HDC hdc = BeginPaint(hwnd, &ps);//Получение контекста устройства
{
if (sw == 1) FillRect(hdc, &ps.rcPaint, hBlueBrush); {
SelectPen(hdc, hOrangePen);
//Небо
SelectBrush(hdc, hSkyBrush);
Rectangle(hdc, -25, -25, 650, 500);
//Основание корабля
SelectBrush(hdc, hOrangeBrush);
MoveToEx(hdc, 50, 350, NULL);
LineTo(hdc, 230, 20);
LineTo(hdc, 400, 350);
LineTo(hdc, 50, 350);
FloodFill(hdc, 300, 200, RGB(255, 165, 0));
MoveToEx(hdc, 400, 350, NULL);
LineTo(hdc, 580, 110);
LineTo(hdc, 760, 350);
LineTo(hdc, 400, 350);
FloodFill(hdc, 500, 250, RGB(255, 165, 0));
//Песок пустыни
SelectPen(hdc, hYellowPen);
SelectBrush(hdc, hYellowBrush);
Ellipse(hdc, -120, 320, 500, 400);
Ellipse(hdc, 440, 320, 700, 400);
Rectangle(hdc, 0, 340, 650, 600);
//Птицы
SelectPen(hdc, hBlackPen);
MoveToEx(hdc, 10, 40, NULL);
LineTo(hdc, 40, 60);
LineTo(hdc, 65, 35);
MoveToEx(hdc, 65, 95, NULL);
LineTo(hdc, 95, 115);
LineTo(hdc, 120, 90);
MoveToEx(hdc, 30, 140, NULL);
LineTo(hdc, 50, 160);
LineTo(hdc, 75, 135);
//Солнце
SelectPen(hdc, hSunPen);
SelectBrush(hdc, hSunBrush);
Ellipse(hdc, 505, 25, 575, 80);
//Облака
SelectPen(hdc, hOblakaPen);
SelectBrush(hdc, hOblakaBrush);
Ellipse(hdc, 490, 25, 550, 70);
Ellipse(hdc, 470, 35, 530, 85);
Ellipse(hdc, 480, 45, 560, 90);
}
if (sw == 2) {
RECT r; //Прямоугольник для надписей
TEXTMETRIC tm; //Для получения характеристик шрифтов
char szMainTitle[] = "ПИРАМИДЫ";//Заголовок
char one[] = "Египетские пирамиды — древние каменные сооружения пирамидальной ";
char two[] = "формы, расположенные в Египте. Количество объектов,";
char three[] = " идентифицируемых как египетские пирамиды, варьируется ";
char four[] = "от 118 до 138 (по данным ноября 2008 года)";
char five[] = "Самой древней считается пирамида Джосера, построенная ";
char six[] = "архитектором Имхотепом в период с 2667 по 2648 гг. до н. э[";
char seven[] = "Самые известные пирамиды";
char eight[] = "Самые известные пирамиды находятся на окраине Каира в Гизе";
/*Выведем строку заголовка*/
HFONT hOldFont = SelectFont(hdc, hFont1);//Выберем в контекст шрифт 1
SetTextColor(hdc, RGB(0, 0, 0));//Установим черный цвет
GetTextMetrics(hdc, &tm);//Получим метрики текста
r.left = 0;//Задание координат прямоугольника, в который
r.top = 5;//будет выводиться текст заголовка
r.right = 600;
r.bottom = r.top + tm.tmHeight;//Высоту прямоугольника выберем по высоте шрифта
DrawText(hdc, szMainTitle, strlen(szMainTitle), &r, DT_CENTER);//Выведен текст
SelectFont(hdc, hFont2);//Выберем шрифт 2
GetTextMetrics(hdc, &tm);//Получим метрики текста
SetTextColor(hdc, RGB(141, 2, 31));//Установим бардовый цвет
r.left = 0;//Задание координат прямоугольника, в который
r.top = 30;//будет выводиться текст заголовка
r.right = 600;
r.bottom = r.top + tm.tmHeight;
DrawText(hdc, one, strlen(one), &r, DT_CENTER);//Выведен текст
GetTextMetrics(hdc, &tm);
r.left = 0;//Задание координат прямоугольника, в который
r.top = 50;//будет выводиться текст заголовка
r.right = 600;
r.bottom = r.top + tm.tmHeight;
DrawText(hdc, two, strlen(two), &r, DT_CENTER);//Выведен текст
GetTextMetrics(hdc, &tm);
r.left = 0;//Задание координат прямоугольника, в который
r.top = 70;//будет выводиться текст заголовка
r.right = 600;
r.bottom = r.top + tm.tmHeight;
DrawText(hdc, three, strlen(three), &r, DT_CENTER);//Выведен текст
GetTextMetrics(hdc, &tm);
r.left = 0;//Задание координат прямоугольника, в который
r.top = 90;//будет выводиться текст заголовка
r.right = 600;
r.bottom = r.top + tm.tmHeight;
DrawText(hdc, four, strlen(four), &r, DT_CENTER);//Выведен текст
GetTextMetrics(hdc, &tm);
r.left = 0;//Задание координат прямоугольника, в который
r.top = 150;//будет выводиться текст заголовка
r.right = 600;
r.bottom = r.top + tm.tmHeight;
DrawText(hdc, five, strlen(five), &r, DT_CENTER);
GetTextMetrics(hdc, &tm);
r.left = 0;//Задание координат прямоугольника, в который
r.top = 170;//будет выводиться текст заголовка
r.right = 600;
r.bottom = r.top + tm.tmHeight;
DrawText(hdc, six, strlen(six), &r, DT_CENTER);
SelectFont(hdc, hFont1);//Выберем шрифт 1
SetTextColor(hdc, RGB(0, 0, 0));//Установим черный цвет
GetTextMetrics(hdc, &tm);
r.left = 0;//Задание координат прямоугольника, в который
r.top = 210;//будет выводиться текст заголовка
r.right = 600;
r.bottom = r.top + tm.tmHeight;
DrawText(hdc, seven, strlen(seven), &r, DT_CENTER);
SetTextColor(hdc, RGB(141, 2, 31));//Установим бардовый цвет
GetTextMetrics(hdc, &tm);
SelectFont(hdc, hFont2);//Выберем шрифт 2
r.left = 0;//Задание координат прямоугольника, в который
r.top = 240;//будет выводиться текст заголовка
r.right = 600;
r.bottom = r.top + tm.tmHeight;
DrawText(hdc, eight, strlen(eight), &r, DT_CENTER);
}
}
EndPaint(hwnd, &ps);//Освобождение контекста устройства
}Editor is loading...