Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить иконку файла, и отобразить её в ListView 
V
    Опции темы
Riddik
Дата 20.9.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Сорри, все уладил.
Заголовок темы переименовать не могу. 

помогите с такой проблемой:

В ListView выводятся имена файлов.
Как получить иконку файла и отобразить её в ListView?




Это сообщение отредактировал(а) Riddik - 20.9.2009, 21:36
PM MAIL   Вверх
SenkraD
Дата 20.9.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 4
Всего: 23



Вообщем SHGetFileInfo и CUSTOMDRAW тебе в руки,
но можеш посмотреть здесь и здесь


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Riddik
Дата 20.9.2009, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Благодарю!
PM MAIL   Вверх
Andrey44
Дата 21.9.2009, 07:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



Цитата(SenkraD @  20.9.2009,  23:16 Найти цитируемый пост)
Вообщем SHGetFileInfo и CUSTOMDRAW тебе в руки

Ну я бы сделал немного по другому.
Вместо CUSTOMDRAW  - ListView_SetImageList
вместо SHGetFileInfo - SHGetImageList
Так можно получить иконку любого размера и с нормальным видом.
Если хочешь могу у себя поискать то что я когда-то писал.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Riddik
Дата 21.9.2009, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Andrey44, файлов буде несколько десятков в ListView, даже сотен.
Большая часть иконок повторяется.

Ничего страшного, что столько одинаковых иконок будут грузиться в ImageList?
PM MAIL   Вверх
Andrey44
Дата 21.9.2009, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



Цитата(Riddik @  21.9.2009,  08:19 Найти цитируемый пост)
Ничего страшного, что столько одинаковых иконок будут грузиться в ImageList?

Они грузиться не будут


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Riddik
Дата 21.9.2009, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Ну тогда отлично.

По функции 
HRESULT SHGetImageList(      
    int iImageList,
    REFIID riid,
    void **ppv
);

Судя по параметрам, из структуры WIN32_FIND_DATA ничего сюда ни пришить?

Можно пример? В MSDN не нашёл.

Вот есть у меня 
Код

him=ImageList_Create(GetSystemMetrics(SM_CXSMICON), 
                         GetSystemMetrics(SM_CYSMICON),
                         ILC_MASK,
                         0, 1);
                     
    
ListView_SetImageList(hwndLV, him, LVSIL_SMALL);   //hwndLV - HWND ListView 



Как мне во время заполнения ListView инфой по файлам из WIN32_FIND_DATA  добывать нужную иконку?


Это сообщение отредактировал(а) Riddik - 21.9.2009, 10:22
PM MAIL   Вверх
Andrey44
Дата 21.9.2009, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



Код

HIMAGELIST hImageList = ImageList_Create(.....);
ListView_SetImageList(..., hImageList, ...);
HICON hIcon
SHFILEINFO fileInfo;
    SHGetFileInfo(pathFile, 0, &fileInfo, sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_DISPLAYNAME | SHGFI_SYSICONINDEX);
    IImageList *imList; 
    SHGetImageList(SHIL_SMALL, IID_IImageList, (void**)&imList);
    imList->GetIcon(fileInfo.iIcon, 0, &hIcon);

int index=-1;
index = ImageList_Add(.....);


LVITEM item;
    ZeroMemory(&item, sizeof(LVITEM));
    //name
    item.mask        = LVIF_TEXT | LVIF_IMAGE;
    item.iItem        = ListView_GetItemCount(...);
    item.iSubItem    = 0;
    item.pszText    = fileInfo.szDisplayName;
    item.iImage        = index;
    ListView_InsertItem(..., &item);
    //type
    item.mask = LVIF_TEXT;
    item.iSubItem    = 1;
    item.pszText    = fileInfo.szTypeName;
    ListView_SetItem(..., &item);
    //size
    item.iSubItem    = 2;
    s.Format(_T("%d kb"), findData.nFileSizeLow/1024);
    item.pszText    = s.GetBuffer();
    ListView_SetItem(..., &item);
    //path
    item.iSubItem    = 3;
    item.pszText    = pathFile;
    ListView_SetItem(..., &item);

Как-то так, посмотри должно работать.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Riddik
Дата 21.9.2009, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



IImageList не опознан.
comctl32.dll подключена...

И утечек памяти никаких не будет после HGetImageList(SHIL_SMALL, IID_IImageList, (void**)&imList);

imList на что-то указывает, у меня все это дело в цикле будет.

Это сообщение отредактировал(а) Riddik - 21.9.2009, 11:18
PM MAIL   Вверх
Andrey44
Дата 21.9.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



Код

#include <CommonControls.h>



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Riddik
Дата 21.9.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Cannot open include file: 'CommonControls.h': No such file or directory


Где же он лежит?
PM MAIL   Вверх
Andrey44
Дата 21.9.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



Цитата(Riddik @  21.9.2009,  11:36 Найти цитируемый пост)
Где же он лежит? 

Как где? У тебя студия какая?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Riddik
Дата 21.9.2009, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 2.12.2006

Репутация: нет
Всего: нет



Делаю проекты в 6.0, потом релиз собираю в 9-й.

Т.к. последняя меня уже достала своими тормозами и многочасовой компиляцией.

Сейчас попробовал сбрать в новой - теперь вся подключается все работает - большое спасибо за помощь!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1229 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.