Image list—ЧЯДНТ?
Код:
SendDlgItemMessage(hDlg,LstComps,LVM_SETIMAGELIST,LVSIL_SMALL,(LPARAM)hImgLst);
Код:
hImgLst=ImageList_Create(16,16,ILC_COLOR32,1,1);
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);
…
lvc.pszText="IP";SendDlgItemMessage(hDlg,LstComps,LVM_INSERTCOLUMN,0,(LPARAM)&lvc);
lvc.pszText="Компьютер";SendDlgItemMessage(hDlg,LstComps,LVM_INSERTCOLUMN,0,(LPARAM)&lvc);
Код:
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--;
…
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?
P.S.Значок с индексом 413—16×16×256,следующий—то же самое,только ×16777216(параметр при создании ImageList менял соответствующим образом.Даже 32 бита ставил)
ImageList_ReplaceIcon( hImgLst, -1, hI);
Цитата: 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(неверный дескриптор значка).Что за?!
Цитата: @pixo $oft
По ходу,дело вообще не в этом,а в том,что я проверил код возврата ImageList_ReplaceIcon,и оказалось,что 1402(неверный дескриптор значка).Что за?!
лично у меня в shell32.dll нет значка с идентификатором 413
Там есть группы значков(один и тот же значок с разным разрешением/глубиной цвета).Например,значки 413 и 414—это подзначки для 135го,НЯП.Но смысл не в этом,а в том,что дескриптор значка после его загрузки !=0,а ImageList_ReplaceIcon выдаёт я уже писал что
Цитата: @pixo $oft
Чем смотрел?
Да тем же Visual Studio.
Хз, у меня после этих двух правок всё завелось.
В том-то и дело,что добавление пренаистраннейшим образом работает.Пришлось изначально создать пустой IL и в него добавлять уже