Окт 16

Операции, не зависящие от шаблона кисти

таким операциям относятся NOTSRCERASE, SRCERASE, SRCINVERT, SRCAND, MERGEPAINT и SRCPAINT. Следует отметить, что операции SRCINVERT и SRCAND используются системой Windows для отображения пиктограмм и курсоров мыши.
Рассмотрим, например, механизм отображения пиктограмм, которым пользуется Windows. Ресурсы предопределенных пиктограмм хранятся в динамически загружаемой библиотеке SheU.32.dll. Доступ к библиотеке можно получить, загрузив ее в приложение при помощи функции LoadLibrary, которая возвращает дескриптор экземпляра модуля (hShell32), содержащего соответствующие растровые изображения. Затем, используя индекс пиктограммы, можно загрузить любую пиктограмму из модуля hShell32. Для этого достаточно вызвать функцию Loadlmage. Например, если передать функции Loadlmage индекс 12, то будет загружена пиктограмма, обозначающая привод CD-ROM.
Функция Loadlmage в случае успешного завершения возвращает дескриптор пиктограммы hlcon. Затем при помощи вызова
GetIconInfo(hIcon, &iconInfo); можно получить информацию о загруженной пиктограмме, сохранив ее в переменной iconlnfo типа IC0NINF0. Для нас в этой структуре интересны два поля:
HBITMAP hbmMask; HBITMAP hbmColor;
Первое из этих полей содержит дескриптор растра, представляющего собой маску пиктограммы, второе поле — дескриптор растра, представляющего собой изображение пиктограммы.
Оба растра имеют размеры 48 х 48. Но для чего нужны эти два растра? Дело в том, что при выводе пиктограммы в виде прямоугольной области некоторые пикселы этой области должны изменяться, а некоторые должны остаться прежними. Изменяемая область называется непрозрачной, и в маске ей соответствует черный цвет. Остальные пикселы образуют прозрачную область — в маске ей соответствует белый цвет.