Лекция: Работа с растровыми изображениями. Иконки.
Иконки используются для отображения окна в закрытом состоянии представляют собой не большое графическое изображение. При заполнении структуры WNDCLASSEXполю hIcon присваивается иконка размером 32x32 пикселя, а полю hIconSm-иконка 16x16 пикселей. Как и курсоры, иконки содержат две маски, что позволяет регулировать их прозрачность. Они могут храниться в файлах с расширением ICOлибо в файлах с расширением RES. Иконка, которая должна использоваться во всех окнах класса, загружается одной из функций: LoadIcon, ExtractIcon, LoadResPicture.Синтаксис первых двух функций следующий .LoadIcon(ByValhInstanceAsLong, ByVallpIconNameAsLong) AsLong,
ExtractIcon(ByValhInstAsLong, ByVallpszExeFileNameAsString, ByValnIconIndexAsLong) AsLong, гдеlpIconName-именованный или числовой идентификатор базовой иконки;
hInst—этот аргумент может быть только App.hInstance;
lpszExeFileName-имя файла, из которого извлекаются иконки: исполнимый файл(exe), библиотека(dll) или отдельный ico-файл;
nIconIndex—номер извлекаемой иконки, или-1 для получения числа иконок в файле.
Если иконка базовая, то первый параметр у функции LoadIconдолжен быть равен нулю. В среде Windows определены следующие базовые иконки: IDI_APPLICATION=0,IDI_EXCLAMATION= 1,IDI_QUESTION = 2, IDI_ASTERISK=3, IDI_HAND=4.
Кстати, функция ExtractIconможет загружать не только иконки, но и курсоры (для Windows они равнозначны).В программе можно создать собственную иконку функцией CreateIcon,а после е использования удалить функцией DeleteObject.
Для отображения в рабочей области окна иконки или курсора используется одна из следующих функций: DrawIcon(ByValhdcAsLong, ByValxLeftAsLong, ByValyTopAsLong, ByValhIconAsLong) AsLong,DrawIconEx(ByValhdcAsLong,ByValxLeftAsLong, ByValyTopAsLong, ByValhIconAsLong, ByValcxWidthAsLong, ByValcyHeightAsLong, ByValistepIfAniCurAsLong, ByValhbrFlickerFreeDrawAsLong, ByValdiFlagsAsLong) AsLong, гдеhDC—дескриптор контекста устройства, на котором будет выведена иконка. Если вывод иконки осуществляется на форму, то свойство AutoRedraw=True, а после вывода иконки нужно перерисовать объект методом Refresh;xLeft, yTop-координаты, в которые будет выведена иконка;
hIcon-дескриптор прорисовываемой иконки; cxWidth, cyHeight-размеры прорисовываемой иконки; istepIfAniCur-этот параметр указывает на номер кадра, если Вы загрузили анимированный курсор; hbrFlickerFreeDraw-дескриптор кисти для перерисовки значка. По документации, если этот параметр не опущен, то он должен снизить мерцание при прорисовке; diFlags—флаги прорисовки, которые могут иметь следующие значения: DI_NORMAL = 3 –прорисовка иконки полностью;
DI_IMAGE = 2 –прорисовка XOR-маски(изображение на черном фоне);DI_MASK = 1 –прорисовка AND-маски(черно-белый негатив). Для выделения иконки из exe-файла используется функция: ExtractAssociatedIcon(ByValhInstAsLong, ByVallpIconPathAsString, lpiIconAsLong) AsLong, гдеlpIconPath—путь к exe-файлу с иконками; lpiIcon—номер иконки в файле.