Здравствуйте, Multix, Вы писали:
M>Здравствуйте, 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>>Сам не пробовал, но по идее должно сработать.
M>Идея и вправду хорошая. Только ( если я не ошибаюсь ) мы должны знать hInstance файла из которого извлекать иконку. А для MMF можно получать только handle. Я понимаю что в итоге это оба void*, но все таки. Вот код. Может что не так, кто подскажет:
M>M> TCHAR szName[]=TEXT("ICL_FILE");
M> HANDLE hMapFile;
M> LPCTSTR pBuf;
M> hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, szName); //size - размер потока
M> if (hMapFile != NULL)
M> {
M> pBuf = (LPTSTR) MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, size);
M> CopyMemory((PVOID)pBuf, buff, (_tcslen(buff) * sizeof(TCHAR))); // buff - буффер с данными из потока
M> const char* s = strchr( iconName, '#' ); // в iconName приходит #0 , #1 и тд. - идентификатор иконки
M> hIcon = (HICON)LoadIcon( (HINSTANCE)hMapFile, MAKEINTRESOURCE(s+1) ); // здесь он мне фигу показывает - hIcon == nullptr
M> CloseHandle(hMapFile);
M> UnmapViewOfFile(pBuf);
M> }
M>
Собственно hIcon = (HICON)ExtractIcon( (HINSTANCE)hMapFile, NULL, atol(s+1) ) вместо LoadIcon результата ожидаемого не дало