Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI.docx
Скачиваний:
49
Добавлен:
16.12.2018
Размер:
3.43 Mб
Скачать

4.5.2 Закрашивание внутренней области

Внутренняя область фигур, соответствующих функциям Rectangle, RoundRect, Ellipse, Chord, Pie, Polygon и PolyPolygon закрашивается текущей кистью (или шаблоном "pattern"), выбранной в контексте устройства. Кисть — это 88 битовый образ, который размножается в горизонтальном и вертикальном направлении при закрашивании области.

Когда Windows использует полутона для отображения большего числа цветов, чем доступно на дисплее, она использует кисть. На монохромных системах Windows может использовать полутона, состоящие из черных и белых пикселей, для создания 64 разных оттенков серого. Более точно, Windows может создать 64 различных монохромных кисти. Для чистого черного цвета все биты в 8х8 растровом образе равны 0. Для получения первого оттенка серого один из 64 битов устанавливается в 1 (т. е. делается белым); два бита для получения второго оттенка серого и т. д. до тех пор, пока все биты не будут установлены в 1 для чисто белого цвета. На цветных видеосистемах полутона — это тоже битовые образы, но с гораздо более широким набором доступных цветов.

Windows содержит четыре функции, позволяющие вам создавать логические кисти. Выбор кисти в контекст устройства осуществляется функцией SelectObject. Так же как и логические перья, логические кисти — тоже объекты GDI. Любая кисть, созданная вами, должна быть удалена. Но нельзя удалять кисть до тех пор, пока она выбрана в контексте устройства.

Ниже приведена функция для создания логической кисти:

hBrush = CreateSolidBrush(rgbColor);

Слово "solid" в имени функции означает, что создается кисть, имеющая сплошной цвет. Когда вы выбираете кисть в контекст устройства, Windows создает 88 битовый образ для полутонов и использует его для кисти.

Вы можете также создать штриховую кисть (hatch), состоящую из горизонтальных, вертикальных или диагональных линий. Кисти этого типа используются в основном при закрашивании внутренней области столбиковых диаграмм и при выводе на плоттер. Ниже приведена функция для создания штриховой кисти:

hBrush = CreateHatchBrush(iHatchStyle, rgbColor);

Параметр iHatchStyle задает стиль штриховки. Он может принимать одно из следующих значений: HS_HORIZONTAL, HS_VERTICAL, HS_FDIAGONAL, HS_BDIAGONAL, HS_CROSS и HS_DIAGCROSS. На рис. 4.18 показан фрагмент штриховки для каждого из указанных стилей.

Параметр rgbColor функции CreateHatchBrush задает цвет штриховых линий. Когда вы выбираете кисть в контекст устройства, Windows преобразует этот цвет к ближайшему чистому цвету. Промежутки между штриховыми линиями закрашиваются в соответствии с режимом фона и цветом фона, определенными в контексте устройства.

Если режим фона равен OPAQUE, то цвет фона, который преобразуется к ближайшему чистому цвету, используется для закрашивания промежутков между штриховыми линиями. В этом случае ни штриховые линии, ни цвет фона не могут быть полутонами. Если режим фона равен TRANSPARENT, то Windows рисует штриховые линии и не зарисовывает промежутки между ними.

В связи с тем, что кисти — это всегда битовые матрицы 88, внешний вид штриховых кистей сильно зависит от разрешения устройства, на котором они отображаются. Каждый из образцов, приведенных на рис. 4.18, изображен в прямоугольной области размером 3216 пикселей, т. е. битовый образ размером 88 был повторен четыре раза по горизонтали и два раза по вертикали. На лазерном принтере с разрешением 300 точек на дюйм такие же 32х16 пиксельные прямоугольники будут иметь размер 1/9 дюйма в ширину и 1/19 дюйма в высоту.

Вы можете также создавать свои собственные кисти, основанные на битовых шаблонах, используя функцию CreatePatternBrush:

hBrush = CreatePatternBrush(hBitmap);

Эта функция подробнее будет рассмотрена в следующей главе при изучении битовых шаблонов.

Windows также содержит функцию, включающую в себя три других функции, строящих кисти (CreateSolidBrush, CreateHatchBrush, CreatePatternBrush):

hBrush = CreateBrushIndirect(&logbrush);

Переменная logbrush имеет тип структуры LOGBRUSH "логическая кисть" (logical brush). Ниже приведены три поля этой структуры. Значение поля lbStyle определяет, как Windows будет интерпретировать два других поля:

Раньше мы использовали функцию SelectObject для выбора логического пера в контекст устройства, функцию DeleteObject — для удаления логического пера, и функцию GetObject — для получения информации о логическом пере. Вы можете использовать эти же три функции применительно к кистям. Получив описатель логической кисти, вы можете выбрать ее в контекст устройства, используя SelectObject :

SelectObject(hdc, hBrush);

Позднее вы удалите созданную кисть с помощью функции DeleteObject:

DeleteObject(hBrush);

Но никогда не удаляйте кисть, установленную текущей в контексте устройства. Если вам нужна информация о кисти, вы можете вызвать GetObject:

GetObject(hBrush, sizeof(LOGBRUSH),(LPVOID) &logbrush);

В этом вызове logbrush — это структура типа LOGBRUSH.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]