Re[10]: Загрузка иконки из файла
От: Multix  
Дата: 07.02.11 06:50
Оценка:
Здравствуйте, 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 результата ожидаемого не дало
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.