Untitled

mail@pastecode.io avatar
unknown
c_cpp
a year ago
14 kB
1
Indexable
Never
#include <windows.h>
#include <windowsx.h>
#include "menu.h"

HFONT hFont1, hFont2, hFont3, hFont4;//Четыре фонта
HBRUSH hBlueBrush, hGreenBrush, hNizBrush, hBlackBrush, hGrayBrush, hRightBrush, hFlagBrush, hIlumBrush, hSeaBrush, hOblakaBrush, hSunBrush, hBrush, hSkyBrush;
HPEN hBlackPen, hPticiPen, hSeaPen, hOblakaPen, hSunPen, hGrayPen, hDarkPen;//Дескриптор новых перьев
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, 600, 500,
        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));
    hSeaPen = CreatePen(PS_SOLID, 3, RGB(30, 144, 255));
    hOblakaPen = CreatePen(PS_SOLID, 3, RGB(255, 255, 255));
    hSunPen = CreatePen(PS_SOLID, 3, RGB(255, 255, 0));

    hGrayPen = CreatePen(PS_SOLID, 3, RGB(180, 180, 180));
    hDarkPen = CreatePen(PS_SOLID, 3, RGB(120, 120, 120));
    //Создадим новые кисти
    hNizBrush = CreateSolidBrush(RGB(255, 222, 183));
    hBlackBrush = CreateSolidBrush(RGB(0, 0, 0));
    hGrayBrush = CreateSolidBrush(RGB(180, 180, 180));
    hRightBrush = CreateSolidBrush(RGB(255, 0, 0));
    hFlagBrush = CreateSolidBrush(RGB(0, 255, 127));
    hIlumBrush = CreateSolidBrush(RGB(70, 130, 180));
    hSeaBrush = CreateSolidBrush(RGB(30, 144, 255));
    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 = 30;//Размер
    lf.lfUnderline = 1;//Подчеркивание
    strcpy_s(lf.lfFaceName, lpszFace1);//Копируем имя шрифта
    hFont1 = CreateFontIndirect(&lf);//Создание шрифта
    /*Создадим шрифт 2 (для подзаголовка и цифр лет)*/
    lf.lfHeight = 16;//Размер
    lf.lfUnderline = 0;//Подчеркивание
    lf.lfItalic = 0;//Курсив
    strcpy_s(lf.lfFaceName, lpszFace2);//Копируем имя шрифта
    hFont2 = CreateFontIndirect(&lf);//Создание шрифта
    /*Создадим шрифт 3 (для оси y)*/
    lf.lfHeight = 18;//Размер
    lf.lfItalic = 0;//Отмена курсива
    lf.lfEscapement = 900;//Угол наклона 90 градусов
    strcpy_s(lf.lfFaceName, lpszFace3);//Копируем имя шрифта
    hFont3 = CreateFontIndirect(&lf);//Создание шрифта
    /*Создадим шрифт 4 (для шкалы)*/
    lf.lfHeight = 16;//Размер
    lf.lfEscapement = 0;//Отмена угла наклона
    hFont4 = CreateFontIndirect(&lf);//Создание шрифта
    /*Создадим Розовый &quot;Пощекочи меня&quot; кисть*/
    hBrush = CreateSolidBrush(RGB(252, 137, 172));
    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) {
        /////////
        SelectPen(hdc, hBlackPen);
        //Небо
        SelectBrush(hdc, hSkyBrush);
        Rectangle(hdc, -25, -25, 650, 500);
        //Море
        SelectPen(hdc, hSeaPen);
        SelectBrush(hdc, hSeaBrush);
        Ellipse(hdc, -120, 120, 80, 200);
        Ellipse(hdc, -20, 120, 200, 200);
        Ellipse(hdc, 100, 120, 300, 200);
        Ellipse(hdc, 220, 120, 400, 200);
        Ellipse(hdc, 340, 120, 500, 200);
        Ellipse(hdc, 440, 120, 600, 200);
        Ellipse(hdc, 550, 120, 700, 200);
        Rectangle(hdc, 0, 140, 650, 900);
        //Подлодка

        SelectPen(hdc, hGrayPen);
        SelectBrush(hdc, hGrayBrush);
        //Хвост
        POINT vertices[] = { {150, 305}, {60, 280}, {60, 330} };
        Polygon(hdc, vertices, sizeof(vertices) / sizeof(vertices[0]));
        //люк
        Rectangle(hdc, 320, 250, 280, 200);
        //перископ
        Rectangle(hdc, 300, 210, 350, 220);
        //борт
        Ellipse(hdc, 500, 250, 100, 350);
        //Илюминаторы
        SelectBrush(hdc, hIlumBrush);
        SelectPen(hdc, hDarkPen);
        Ellipse(hdc, 150, 270, 225, 320);
        //Ellipse(hdc, 275, 260, 205, 310);
        Ellipse(hdc, 250, 270, 300, 320);
        Ellipse(hdc, 310, 270, 360, 320);
        Ellipse(hdc, 370, 270, 420, 320);
        //Облака
        SelectPen(hdc, hOblakaPen);
        SelectBrush(hdc, hOblakaBrush);
        Ellipse(hdc, 70, 25, 130, 70);
        Ellipse(hdc, 90, 25, 150, 85);
        Ellipse(hdc, 130, 45, 190, 90);
        Ellipse(hdc, 170, 25, 230, 70);
        Ellipse(hdc, 370, 25, 430, 70);
        Ellipse(hdc, 390, 25, 450, 85);
        Ellipse(hdc, 430, 45, 490, 90);
        //Солнце
        SelectPen(hdc, hSunPen);
        SelectBrush(hdc, hSunBrush);
        Ellipse(hdc, 555, -20, 645, 60);

        /////////
    };
    {
        if (sw == 2) {
        ///////////
            RECT r; //Прямоугольник для надписей
            PAINTSTRUCT ps;//Структура, требуемая для рисования в рабочей области
            TEXTMETRIC tm; //Для получения характеристик шрифтов
            char szMainTitle[] = "Подводная лодка";//Заголовок
            char one[] = "Подводная лодка (ПЛ) (подлодка, субмарина) — класс кораблей, способных погружаться и ";
            char two[] = "длительное время действовать в подводном положении. В отличие от надводного судна, ПЛ";
            char three[] = "обладает способностью преднамеренно изменять свою осадку вплоть до полного погружения";
            char four[] = "в воду и ухода на глубину за счёт заполнения забортной водой цистерн главного балласта.";
            char five[] = "Обычно, подлодки используются в военных целях. Эта подлодка возвращается с экспедиции.";
            char six[] = "На ее борту ученые везут новые артефакты, найденные на одном из необитаемых островов.";
            char seven[] = "Самые известные подлодки:";
            char eight[] = "094 «Цзинь», 094 «Цзинь», S119 «Astute», «Вирджиния», «Seawolf», «Seawolf»,«Ясень»";
            
         
            /*Выведем строку заголовка*/
            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);//Освобождение контекста устройства
}