Страница 2 из 2 битовая маска AND | битовая маска XOR | Дисплей | 0 | 0 | Чёрный | 0 | 1 | Белый | 1 | 0 | Экран | 1 | 1 | инвертированный экран | Если создание иконки осуществлялось при помощи функции CreateIconIndirect, то перед закрытием, приложение должно воспользоваться функцией DestroyIcon, чтобы удалить иконки. Однако, если иконки создавались другими функциями, то в уничтожении иконок нет необходимости. Отображение иконки Следующий пример демонстрирует, как нарисовать иконку в клиентской области окна, контекст устройства которого (DC) указан в параметре hdc. HICON hIcon1; // дескриптор иконки HDC hdc; // дескриптор констекста устройства DrawIcon(hdc, 10, 20, hIcon1); Каждому окну в системе присваивается класс иконок. Приложение может на стадии регистрации присвоить окну определённый класс иконок. Так же приложение может заменить иконку присвоенную окна при помощи функции SetClassLong. Следующий пример заменяет класс иконок на иконку с идентификатором ресурса 480. HINSTANCE hinst; // дескриптор текущего экземпляра HWND hwnd; // дескриптор главного окна
SetClassLong(hwnd, // дескриптор окна GCL_HICON, // изменяем иконку (LONG) LoadIcon(hinst, MAKEINTRESOURCE(480)) ); Использование ресурсов иконок из других модулей Ниже приведён пример, который создаёт дескриптор иконки, основанный на иконке из другого исполняемого файла. Для этого используются функции CreateIconFromResourceEx, DrawIcon, и LookupIconIdFromDirectoryEx, а так же некторые функции для работы с ресурсами. В конце иконка отображается в окне. Пример HICON hIcon1; // дескриптор иконки HINSTANCE hExe; // дескриптор закгруженного файла .EXE HRSRC hResource; // дескриптор для FindResource HRSRC hMem; // дескриптор для LoadResource BYTE *lpResource; // указатель на данные ресурса int nID; // ID ресурса, который лучше всего удовлетворяет // текущему экрану
HDC hdc; // дескриптор констекста устройства // Загружаем файл, из которого будет скопирована иконка. // LoadLibrary должна иметь явный путь. // hExe = LoadLibrary("myapp.exe"); if (hExe == NULL) { //Ошибка загрузки модуля return; } // Находим группу иконки, идентификатор которой 440. hResource = FindResource(hExe, MAKEINTRESOURCE(440), RT_GROUP_ICON); // Загружаем и блокируем группу иконки. hMem = LoadResource(hExe, hResource); lpResource = LockResource(hMem); // Get the identifier of the icon that is most appropriate // for the video display. nID = LookupIconIdFromDirectoryEx((PBYTE) lpResource, TRUE, CXICON, CYICON, LR_DEFAULTCOLOR); // Ищем биты для nID иконки. hResource = FindResource(hExe, MAKEINTRESOURCE(nID), MAKEINTRESOURCE(RT_ICON)); // Загружаем и блокируем иконку. hMem = LoadResource(hExe, hResource); lpResource = LockResource(hMem); // Создаём дескриптор иконки. hIcon1 = CreateIconFromResourceEx((PBYTE) lpResource, SizeofResource(hExe, hResource), TRUE, 0x00030000, CXICON, CYICON, LR_DEFAULTCOLOR); // Рисуем иконку в клиентской области. DrawIcon(hdc, 10, 20, hIcon1); |