Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Image list—ЧЯДНТ?

7
29 февраля 2012 года
@pixo $oft
3.4K / / 20.09.2006
Есть некий ListView LstComps(в режиме report),с которым посредством
 
Код:
SendDlgItemMessage(hDlg,LstComps,LVM_SETIMAGELIST,LVSIL_SMALL,(LPARAM)hImgLst);
связывается ImageList
 
Код:
hImgLst=ImageList_Create(16,16,ILC_COLOR32,1,1);
(разрядность цвета,в принципе,роли не играет.Также добавление новых значком не планируется,поэтому последний параметр был 0—без разницы)

ListView имеет 2 колонки,которые инициализируются следующим образом
 
Код:
LVCOLUMN lvc={LVCF_TEXT|LVCF_WIDTH,0,80};

lvc.pszText="IP";SendDlgItemMessage(hDlg,LstComps,LVM_INSERTCOLUMN,0,(LPARAM)&lvc);
lvc.pszText="Компьютер";SendDlgItemMessage(hDlg,LstComps,LVM_INSERTCOLUMN,0,(LPARAM)&lvc);
Затем начинается самое интересное—в ImageList надо загрузить значок,который будет у всех элементов ListView.Значок грузится из Shell32(библиотека в адресном пространстве процесса не присутствует,загружаю вручную).Всё нормально до процесса записи значка в ImageList
Код:
LVITEM lvi={LVIF_TEXT|LVIF_IMAGE};

hShLib=LoadLibraryEx("Shell32",0,LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE|LOAD_LIBRARY_AS_IMAGE_RESOURCE);        //Загрузка библиотеки как файла
HICON hI=LoadIcon(hShLib,MAKEINTRESOURCE(413));     //Загрузка значка из неё
ImageList_ReplaceIcon(hImgLst,0,hI);        //Собственно попытка добавить значок в ImageList
SendDlgItemMessage(hDlg,LstComps,LVM_SETIMAGELIST,LVSIL_SMALL,(LPARAM)hImgLst);     //Связь ImageList с ListView
//Добавление элементов
lvi.pszText="Test";
SendDlgItemMessage(hDlg,LstComps,LVM_INSERTITEM,0,(LPARAM)&lvi);        //1й столбец
lvi.iSubItem++;lvi.pszText="123";
SendDlgItemMessage(hDlg,LstComps,LVM_SETITEM,0,(LPARAM)&lvi);       //2й столбец
lvi.iSubItem--;
Т.е. конкретно ImageList_ReplaceIcon(hImgLst,0,hI); возвращает -1,что свидетельствует о неудаче.Предыдущие функции отрабатывают нормально(т.е. библиотека грузится,и значок тоже)

Как правильно заменить значок в ImageList?

P.S.Значок с индексом 413—16×16×256,следующий—то же самое,только ×16777216(параметр при создании ImageList менял соответствующим образом.Даже 32 бита ставил)
341
01 марта 2012 года
Der Meister
874 / / 21.12.2007
ImageList_ReplaceIcon( hImgLst, -1, hI);
7
01 марта 2012 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: Der Meister
ImageList_ReplaceIcon( hImgLst, -1, hI);

Знаю,читал

Цитата:
Index of the image to replace. If i is –1, the function appends the image to the end of the list

Только мне надо не добавить в конец,а тот значок,что там уже есть,заменить

По ходу,дело вообще не в этом,а в том,что я проверил код возврата ImageList_ReplaceIcon,и оказалось,что 1402(неверный дескриптор значка).Что за?!

341
01 марта 2012 года
Der Meister
874 / / 21.12.2007
Цитата: @pixo $oft
По ходу,дело вообще не в этом,а в том,что я проверил код возврата ImageList_ReplaceIcon,и оказалось,что 1402(неверный дескриптор значка).Что за?!

лично у меня в shell32.dll нет значка с идентификатором 413

7
02 марта 2012 года
@pixo $oft
3.4K / / 20.09.2006
Чем смотрел?
Там есть группы значков(один и тот же значок с разным разрешением/глубиной цвета).Например,значки 413 и 414—это подзначки для 135го,НЯП.Но смысл не в этом,а в том,что дескриптор значка после его загрузки !=0,а ImageList_ReplaceIcon выдаёт я уже писал что
341
03 марта 2012 года
Der Meister
874 / / 21.12.2007
Цитата: @pixo $oft
Чем смотрел?

Да тем же Visual Studio.
Хз, у меня после этих двух правок всё завелось.

7
03 марта 2012 года
@pixo $oft
3.4K / / 20.09.2006
В том-то и дело,что добавление пренаистраннейшим образом работает.Пришлось изначально создать пустой IL и в него добавлять уже

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог