Нижеследующий код использует функции CreateIconFromResourceEx, DrawIcon и LookupIconIdFromDirectoryEx и несколько функций ресурса, чтобы создать дескриптор значка, основанный на данных значка из другого исполняемого файла. Затем, модуль показывает на экране значок в окне.
Предупреждение защиты Неправильное использование функции LoadLibrary может поставить под угрозу обеспечение безопасности вашего приложения, когда загружается неправильная динамически подключаемая библиотека (DLL). Обратитесь за информацией к документации по LoadLibrary о том, как правильно загружать динамически подключаемые библиотеки (DLL) в различных версиях Windows. |
Демонстрационный пример
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); // Получим идентификатор значка, который является самым соответствующим // для монитора. 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); |