Здравствуйте, Carc, Вы писали:
C>Здравствуйте, Multix, Вы писали:
M>>Здравствуйте, Aniskin, Вы писали:
A>>>Здравствуйте, Multix, Вы писали:
M>>>>Может кто подскажет что не так сделал
A>>>Не определил icnf.hbmMask.
M>>Я через GDI+ смог добрать до картинки=). Теперь встал другой вопрос. Есть ли возможность загрузить иконку из .icl, если содержимое icl находится в потоке
C>Хороший вопрос!
А действительно если спроецировать содержимое *.icl на Memory Mapped File, а потом подсунуть все это дело достославной функции ExtractIcon(Ex)!?! Ведь таскает же она иконки из загруженных .exe и .dll? Почему бы и в этом случае ей не отработать корректно?
C>Сам не пробовал, но по идее должно сработать.
Идея и вправду хорошая. Только ( если я не ошибаюсь ) мы должны знать hInstance файла из которого извлекать иконку. А для MMF можно получать только handle. Я понимаю что в итоге это оба
void*, но все таки. Вот код. Может что не так, кто подскажет:
TCHAR szName[]=TEXT("ICL_FILE");
HANDLE hMapFile;
LPCTSTR pBuf;
hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, szName); //size - размер потока
if (hMapFile != NULL)
{
pBuf = (LPTSTR) MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, size);
CopyMemory((PVOID)pBuf, buff, (_tcslen(buff) * sizeof(TCHAR))); // buff - буффер с данными из потока
const char* s = strchr( iconName, '#' ); // в iconName приходит #0 , #1 и тд. - идентификатор иконки
hIcon = (HICON)LoadIcon( (HINSTANCE)hMapFile, MAKEINTRESOURCE(s+1) ); // здесь он мне фигу показывает - hIcon == nullptr
CloseHandle(hMapFile);
UnmapViewOfFile(pBuf);
}