listctrl加入图标
2012-11-06 14:41 龙成 阅读(1274) 评论(0) 编辑 收藏 举报1 m_listctrl.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_SMALLICON); 2 LONG lStyle; 3 lStyle = GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE);//获取当前窗口style 4 lStyle &= ~LVS_TYPEMASK; //清除显示方式位 5 lStyle |= LVS_REPORT; //设置style 6 SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE, lStyle);//设置style 7 8 9 m_image.Create(16,16,TRUE|ILC_COLOR32,4,4);//创建图像形式 10 m_listctrl.SetImageList(&m_image,LVSIL_SMALL); //listcontrol关联图像 11 m_listctrl.InsertColumn(0,_T("文件名"),LVCFMT_CENTER,500);
listctrl的初始化并和cimage对象绑定。cimage对象必须为全局或者是类数据成员。
1 UINT __stdcall ShowFunc(LPVOID p) 2 { 3 CGetFileICONDlg *dlg = (CGetFileICONDlg*) p; 4 while(1) 5 { 6 WaitForSingleObject(dlg->hevent,INFINITE); 7 dlg->ClearList(); 8 map<pair<CString,CString>,HICON>::iterator iter = dlg->m_fileinfo.begin(); 9 int i = 0; 10 while(iter != dlg->m_fileinfo.end()) 11 { 12 if(dlg->isFirst) 13 { 14 dlg->isFirst = FALSE; 15 } 16 else 17 { 18 dlg->m_image.Remove(0); 19 } 20 dlg->m_image.Add(iter->second);//增加图像。 21 dlg->m_listctrl.InsertItem(i,_T("")); 22 LVITEM lvItem; 23 lvItem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_STATE; 24 lvItem.iImage = i;//图像在image里面的下标 25 dlg->m_listctrl.InsertItem(&lvItem); 26 dlg->m_listctrl.SetItemText(i,0,iter->first.first); 27 28 iter++; 29 i++; 30 } 31 ResetEvent(dlg->hevent); 32 } 33 return 0; 34 }
//将图标显示到listctrl中
1 HICON CGetFileICONDlg::GetFileICON(CString strFilePath) 2 { 3 SHFILEINFO stFileInfo; 4 :: SHGetFileInfo(strFilePath, 0, &stFileInfo, sizeof(stFileInfo), SHGFI_ICON); 5 return stFileInfo.hIcon; 6 }
得到文件的图标