Untitled

4
mail@pastecode.io avatar
unknown
c_cpp
a year ago
4.8 kB
1
Indexable
Never
#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

/*Глобальные переменные, доступные всем функциям*/
HPEN hRedPen, hGreenPen, hBluePen;//Дескрипторы новых нерьев
HBRUSH hRedBrush, hGreenBrush, hBlueBrush;//и новых кистей

/*Главная функция WinMain */
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
    char szClassName[] = "MainWindow";
    char szTitle[] = "Программа 3";
    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 = CreateSolidBrush(RGB(200, 200, 100));
    wc.lpszClassName = L"MainWindow";
    RegisterClass(&wc);

    /* Создание главного окна и отображение его на экране */
    HWND hwnd = CreateWindow(L"MainWindow", L"Программа 3",
        WS_OVERLAPPEDWINDOW, 250, 150, 500, 200,
        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)
{
    /*Создадим новые перья*/
    hRedPen = CreatePen(PS_SOLID, 4, RGB(150, 0, 0));
    hGreenPen = CreatePen(PS_SOLID, 10, RGB(0, 150, 0));
    hBluePen = CreatePen(PS_SOLID, 20, RGB(0, 0, 150));
    /*Создадим новые кисти*/
    hRedBrush = CreateSolidBrush(RGB(255, 120, 120));
    hGreenBrush = CreateSolidBrush(RGB(120, 255, 120));
    hBlueBrush = CreateSolidBrush(RGB(120, 120, 255));
    return TRUE;
}

/*Функция обработки сообщения WM_PAINT*/
void OnDestroy(HWND)
{
    PostQuitMessage(0);
}

/*Функция обработки события WM_PAINT*/
void OnPaint(HWND hwnd)
{
    PAINTSTRUCT ps;//Структура, требуемая для рисования в рабочей области
    char szText1[] = "Rectangle";
    char szText2[] = "Ellipse";
    char szText3[] = "Pie";
    char szText4[] = "Chord";
    HDC hdc = BeginPaint(hwnd, &ps);//Получение контекста устройства
    SetBkMode(hdc, TRANSPARENT);//Прозрачный фон под текстом
    SetTextColor(hdc, RGB(0, 0, 255));//Синий цвут текста
    /*Выведем четыре строки текста*/
    TextOut(hdc, 25, 5, L"Rectangle", strlen(szText1));
    TextOut(hdc, 155, 5, L"Ellipse", strlen(szText2));
    TextOut(hdc, 280, 5, L"Pie", strlen(szText3));
    TextOut(hdc, 395, 5, L"Chord", strlen(szText4));
    /*Выведем четыре фигуры*/
    Ellipse(hdc, 130, 40, 230, 140);//Круг новыми инструментами
    SelectPen(hdc, hRedPen);//Выберем в контекст новое перо
    SelectBrush(hdc, hRedBrush);//и новую кисть
    Rectangle(hdc, 10, 40, 110, 140);//Квадрат инструментами по умолчанию
    SelectPen(hdc, hGreenPen);//Выберем новое перо
    SelectBrush(hdc, hGreenBrush);//и новую кисть
    Chord(hdc, 370, 40, 470, 140, 470, 125, 370, 125);//Сегмент
    SelectPen(hdc, hBluePen);//Выберем в контекст новое перо
    SelectBrush(hdc, hBlueBrush);//и новую кисть
    Pie(hdc, 250, 40, 350, 140, 350, 140, 250, 140);//Сектор опять новыми инструментами
    EndPaint(hwnd, &ps);//Освобождение контекста устройства
}