Главная страница
Навигация по странице:

  • CreatePenIndirect : hPen = CreatePenIndirect(logpen); Простые перья, созданные с помощью функции CreatePenIndirect

  • CreatePen Следует обратить внимание на то, что функции CreatePen и CreatePenIndirect

  • WM_PAINT и удалить его перед вызовом функции EndPaint

  • DeleteObject Все кисти, предоставляемые GDI, приведены в табл. 9. Таблица 9. Стандартные кисти Индекс кисти Описание

  • SetDCBrushColor GRAY_BRUSH Серая кисть HOLLOW_BRUSH Пустая кисть (заливки нет) LTGRAY_BRUSH Светло-серая кисть NULL_BRUSH То же, что и HOLLOW_BRUSH

  • CreateSolidBrush : HBRUSH CreateSolidBrush(COLORREF crColor); Её единственному параметру crColor передаётся цвет кисти в виде значения типа COLORREF

  • PALETTERGB цвет в наиболее подходящий индекс палитры. Задание.

  • Варианты заданий № варианта Функции Начальное значение X Конечное значение X

  • Порядок выполнения работы.

  • Компьютерная графика. Лабораторная работа 1_2п. Лабораторная работа основы создания графических приложений в системе windows


    Скачать 0.96 Mb.
    НазваниеЛабораторная работа основы создания графических приложений в системе windows
    АнкорКомпьютерная графика
    Дата04.04.2022
    Размер0.96 Mb.
    Формат файлаpdf
    Имя файлаЛабораторная работа 1_2п.pdf
    ТипЛабораторная работа
    #441702
    страница4 из 4
    1   2   3   4
    CreatePenIndirect
    :
    HPEN CreatePenIndirect(CONST LDGPEN* lplgpn);
    Этой функции в качестве параметра передаётся адрес структуры типа
    LOGPEN
    : typedef struct tagLOGPEN {
    UINT style; // стиль пера
    POINT width; // толщина в логических единицах
    COLORREF color; // цвет
    } LOGPEN;
    Член структуры
    width
    имеет тип
    POINT
    , но Windows использует только величину
    width.x
    как толщину пера и игнорирует значение
    width.y
    Таким образом, сначала определяется переменная типа
    LOGPEN
    , например:
    LOGPEN logpen;
    Затем полям этой переменной присваиваются нужные значения, например: logpen.style = PS_SOLID; logpen.width.x = 10; logpen.color = RGB(255, 0, 0);
    И только после этого вызывается функция
    CreatePenIndirect_:_hPen_=_CreatePenIndirect(logpen);_Простые_перья,_созданные_с_помощью_функции_CreatePenIndirect'>CreatePenIndirect
    : hPen = CreatePenIndirect(&logpen);
    Простые перья, созданные с помощью функции
    CreatePenIndirect
    , обладают точно такими же характеристиками, что и перья, созданные функцией
    CreatePen

    Следует обратить внимание на то, что функции
    CreatePen
    и
    CreatePenIndirect
    не требуют дескриптора контекста устройства. Они создают логические перья, которые никак не связаны с контекстом устройства, пока не будет вызвана функция
    SelectObject
    Если программе требуется несколько перьев, то сценарий их использования может быть следующим. Например, приложению требуются три нестандартных пера: красное толщиной 2, зелёное толщиной 5 и синее пунктирное. Сначала нужно определить переменные для хранения дескрипторов этих перьев: static HPEN hPenl, hPen2. hPen3;
    Сами перья могут быть созданы в процессе обработки сообщения
    WM_CREATE
    : hPenl = CreatePen(PS_SOLID, 2, RGB(255, 0. 0)); hPen2 = CreatePen(PS_SOLID, 5, RGB(0, 255, 0)); hPen3 = CreatePen(PS_DASH, 1, RGB(0, 0, 255));
    В процессе обработки сообщения
    WM_PAINT
    можно выбрать одно из этих перьев в контекст устройства и рисовать с его помощью:
    SelectObject(hDC, hPenl);
    // ... функции рисования линий
    SelectObject(hDC, hPen2);
    // ... функции рисования линий
    В процессе обработки сообщения
    WM_DESTROY
    рекомендуется удалить эти перья:
    DeleteObject(hPenl);
    Delete0bject(hPen2);
    Delete0bject(hPen3);
    Это наиболее общий подход. Но возможны и другие сценарии. Например, можно создать перо в блоке обработки сообщения
    WM_PAINT
    и удалить его перед вызовом функции
    EndPaint
    или даже после её вызова.
    Для закрашивания площадей различных геометрических объектов используется такой графический объект, как кисть, представляющую собой растр размером 8 x 8 пикселов, который при закрашивании области дублируется в горизонтальном и вертикальном направлении. Когда Windows использует смешивание для отображения большего числа цветов, чем доступно на дисплее, то на самом деле для этого используется кисть.
    Windows GDI предоставляет несколько функций для создания объектов логических кистей. Логическая кисть описывает требования, предъявляемые к заливке со стороны приложения. Эти требования не всегда совпадают с возможностями физических устройств. Драйверы устройств поддерживают собственные структуры данных, определяющие реализацию логической кисти.
    Такие внутренние объекты называются физическими кистями.

    Для дескрипторов логических кистей зарезервирован тип
    HBRUSH
    , поэтому новая кисть объявляется следующим образом:
    HBRUSH hBrush;
    Значение дескриптора получают вызовом соответствующей функции. Вид вызываемой функции зависит от типа кисти. Так же как и при работе с перьями, созданные кисти выбираются в контекст устройства с помощью функции
    SelectObject
    , после чего заливка всех замкнутых фигур осуществляется выбранной кистью. Когда кисть перестаёт быть нужной, рекомендуется вернуть в контекст устройства прежнюю кисть, а ненужную кисть удалить при помощи функции
    DeleteObject
    Все кисти, предоставляемые GDI, приведены в табл. 9.
    Таблица 9. Стандартные кисти
    Индекс кисти
    Описание
    BLACK_BRUSH
    Чёрная кисть
    DKGRAY_BRUSH
    Тёмно-серая кисть
    DC_BRUSH
    Кисть DC – сплошная кисть; по умолчанию имеет белый цвет; цвет может быть сменён функцией
    SetDCBrushColor
    GRAY_BRUSH
    Серая кисть
    HOLLOW_BRUSH
    Пустая кисть (заливки нет)
    LTGRAY_BRUSH
    Светло-серая кисть
    NULL_BRUSH
    То же, что и
    HOLLOW_BRUSH
    WHITE_BRUSH
    Белая кисть, которая используется по умолчанию
    Чтобы получить дескриптор стандартной кисти, достаточно вызвать функцию
    GetStockObject
    с одной из констант, приведённых в табл. 9, например: hBrush = (HBRUSH) GetStockObject(GRAY_BRUSH);
    Стандартные кисти хороши простотой своего использования, но их возможности явно недостаточны для нужд многих приложений. Поэтому
    Windows содержит функции, создающие пользовательские кисти следующих типов: сплошные кисти, штриховые кисти и растровые кисти.
    Сплошная кисть создается вызовом функции
    CreateSolidBrush
    :
    HBRUSH CreateSolidBrush(COLORREF crColor);
    Её единственному параметру
    crColor
    передаётся цвет кисти в виде значения типа
    COLORREF
    . Обычно это значение задаётся при помощи макроса
    RGB
    или
    PALETTERGB
    . Первый вариант используется, если устройство вывода поддерживает полный диапазон цветов, определяемый 24-битным RGB- значением. В этом случае приложению нет необходимости работать с палитрой.
    Второй вариант необходимо использовать, если приложение работает с логической палитрой. В последнем случае Windows преобразует запрошенный в макросе
    PALETTERGB
    цвет в наиболее подходящий индекс палитры.

    Задание. Разработать программу, вычерчивающую графики функций в одной системе координат согласно заданию (см. варианты). Цвет линий графиков должен быть различным. Шкалы координатных осей следует проградуировать и подписать. При изменении размеров окна выводимое изображение следует масштабировать.
    Варианты заданий

    варианта
    Функции
    Начальное
    значение
    X
    Конечное
    значение
    X
    1
    𝑒
    −𝑥
    и
    10
    −𝑥
    1 2
    2 tg
    3
    𝑥 и ctg
    3
    𝑥
    0,6 1,5 3
    𝑒
    𝑥
    sin 𝑥 и 𝑒
    −𝑥
    sin 𝑥
    0 1
    4
    √ln 𝑥 и √ln 𝑥
    4 1
    5 5 cos √𝑥 и tg √𝑥
    0,2 2
    6 10
    −𝑥
    и
    10
    √𝑥
    0,1 2
    7 arcsin
    1
    𝑥
    2
    и arccos
    1
    𝑥
    3 1.05 2
    8 ln
    1
    𝑥
    и lg
    1
    𝑥
    0.1 1
    Порядок выполнения работы.
    1. Изучить материал по работе с графическими примитивами интерфейса
    Windows API.
    2. Написать и отладить программу согласно варианту задания.
    3. Представить результаты работы программы.
    4. Оформить отчёт.
    1   2   3   4


    написать администратору сайта