代码改变世界

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 }

得到文件的图标