我想爲列表視圖創建一個HIMAGELIST
。它實際上需要由文件圖標組成。試圖創建HIMAGELIST,我在這裏做錯了什麼?
這裏是我的代碼:
HIMAGELIST imageList = ImageList_Create(GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),
ILC_MASK, 1, 1);
HICON ico = reinterpret_cast<HICON>(LoadImage(0,IDI_APPLICATION,
IMAGE_ICON,0,0,LR_SHARED));
ImageList_AddIcon(imageList, ico);
ListView_SetImageList(listView, imageList, LVSIL_SMALL);
有三個元素現在有三個應用項目的列表視圖。
但是,當我嘗試添加另一個圖標(在這種情況下爲IDI_HAND
)時,我仍然得到相同的3個圖標。
另一個問題我已經是我無法獲取我需要實際的文件圖標:
SHFILEINFO sfi;
SHGetFileInfo (L"C:\\test.txt", NULL, &sfi, sizeof (sfi), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
ImageList_AddIcon(imageList, sfi.hIcon);
這導致空的圖標,而不是txt
圖標我想要的。
我一直在爲此而苦苦掙扎,我非常感謝您的幫助。
UPDATE
我使用的示例代碼我在互聯網上發現,填補了列表視圖(顯然這不是我想要的):
UINT columnMask = LVCF_TEXT|LVCF_FMT|LVCF_SUBITEM|LVCF_WIDTH;
LVCOLUMN lc[] = {
{ columnMask, 0, 150, L"Text...",0, 0,0,0 },
{ columnMask, LVCFMT_CENTER, 70, L"Number",0, 1,0,0 },
{ columnMask, 0, 100, L"Whatever",0, 2,0,0 },
};
ListView_InsertColumn(listView, 0, &lc[0]);
ListView_InsertColumn(listView, 1, &lc[1]);
ListView_InsertColumn(listView, 2, &lc[2]);
UINT itemMask = LVIF_TEXT;
LVITEM li[] = {
{ itemMask, 0,0, 0,0, L"...for the first item!",0, 0,0,0,0,0,0 },
{ itemMask, 0,1, 0,0, L"1",0, 0,0,0,0,0,0 },
{ itemMask, 0,2, 0,0, L"14 bucks",0, 0,0,0,0,0,0 },
{ itemMask, 1,0, 0,0, L"...for the second item!",0, 0,0,0,0,0,0 },
{ itemMask, 1,1, 0,0, L"24",0, 0,0,0,0,0,0 },
{ itemMask, 1,2, 0,0, L"2 suns",0, 0,0,0,0,0,0 },
{ itemMask, 2,0, 0,0, L"...for the second item!",0, 0,0,0,0,0,0 },
{ itemMask, 2,1, 0,0, L"24",0, 0,0,0,0,0,0 },
{ itemMask, 2,2, 0,0, L"2 suns",0, 0,0,0,0,0,0 },
{ itemMask, 3,0, 0,0, L"...for the second item!",0, 0,0,0,0,0,0 },
{ itemMask, 3,1, 0,0, L"24",0, 0,0,0,0,0,0 },
{ itemMask, 3,2, 0,0, L"2 suns",0, 0,0,0,0,0,0 },
};
// setting an icon like this doesn't work
li[0].iImage = sfi.iIcon;
ListView_InsertItem(listView, &li[0]);
ListView_SetItem(listView, &li[1]);
ListView_SetItem(listView, &li[2]);
ListView_InsertItem(listView, &li[3]);
ListView_SetItem(listView, &li[4]);
ListView_SetItem(listView, &li[5]);
ListView_InsertItem(listView, &li[6]);
ListView_SetItem(listView, &li[7]);
ListView_SetItem(listView, &li[8]);
(1)請提供更多關於「我仍然擁有相同的3個圖標」的信息。你的代碼中沒有任何地方會嘗試使用你添加的任何圖標。 (2)如果你通過'SHGFI_SYSICONINDEX',那麼你就說「我不想要'hIcon',我只對'iIcon'感興趣。」既然你想要'hIcon',你就不應該通過這個標誌。 –
@雷蒙德,我已經更新了我的問題。我通過'ListView_InsertItem'將這些項添加到列表視圖中。我用'ListView_SetImageList(listView,imageList,LVSIL_SMALL)設置圖像列表;' – Alex