Шаблоном для заполнения области может служить также растровая картинка. Для этого кисть нужно создавать при помощи функции CreatePatternBrush(HBITMAP hbmp). Эта функция получает в качестве параметра дескриптор битовой карты, загруженной, например, из ресурса или BMP-файла. Если в файл ресурсов включена растровая картинка, то ее очень легко загрузить в память и получить дескриптор битовой карты HBITMAP при помощи функции HBITMAP LoadBi tmap(HINSTANCE, char *). Этой функции требуется передать дескриптор приложения и идентификатор загружаемого ресурса.
Растровое изображение является элементом контекста. Однако, в отличие от кисти и пера, дескриптором загруженной картинки HBITMAP нельзя заменить тот объект HBITMAP, который задан по умолчанию при создании контекста.
При косвенной передаче данных все три функции создания кисти заменяются одной функцией HBRUSH CreateBrushlndi rect(LOGBRUSH *1 piЬ). В параметре 1 pib передается адрес структуры tagLOGBRUSH, определение которой приведено в листинге 11.2.
Листинг 11.2
typedef struct tagLOGBRUSH {
UINT lbStyle: COLORREF lbColor: LONG IbHatch; } LOGBRUSH;
Если в поле 1 bSty 1 e записана константа BS_HATCHED, то последующие поля задают цвет и тип штриховки. Если поле 1 bStyle содержит значение BS_PATTERN, то поле IbHatch задает дескриптор битовой карты, используемой как шаблон кисти. Если Создание элементов контекста же 1 bStyl е содержит значение BS_S0LID, то создается сплошная кисть цвета 1 bCol or, а поле 1 bHatch не используется.
Константы BS_H0LL0W или BS_NULL в поле lbStyle определяют «пустую» кисть. При этом закраска областей не производится.
Следует учитывать, что только функция CreateBrushlndi rect() позволяет нарисовать окружность вместо круга или прямоугольную рамку вместо залитого цветом кисти прямоугольника. Необходимый для этого стиль BSJJULL (или BS_H0LL0W) можно задать только в структуре L0GBRUSH. Константы BS_NULL и BS__H0LL0W совпадают с HS_VERTICAL, поэтому попытка указать их в функции CreateHatchBrush() приведет к созданию кисти с вертикальной штриховкой.