Visual C++2005下为ListControl添加图标
作者:flyfish 2009-5-17
一 窗体初始化时ListControl载入图标
CListCtrl m_List_Image;
CImageList ImageListBmp;
初始化窗口添加
HICON hicon;
ImageListBmp.Create(48,48, ILC_COLOR32, 0, 10);
hicon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
ImageListBmp.Add(hicon);
m_List_Image.SetImageList(&ImageListBmp,LVSIL_NORMAL);
m_List_Image.InsertItem(0,_T("1"),1);
二 采用文件对话框的方式添加图标到ListControl
在C*Dlg头文件中声明
CListCtrl m_List_Image;
CImageList ImageListBmp;
初始化窗口添加
ImageListBmp.Create(48,48, ILC_COLOR32, 0, 10);
m_List_Image.SetImageList(&ImageListBmp,LVSIL_NORMAL);
添加一个按钮事件
UpdateData(true);
CFileDialog fileDialog( TRUE,_T("*.*"),NULL,NULL,NULL);
if (fileDialog.DoModal() != IDOK) return;
CString strExt= fileDialog.GetFileExt();
CString strFileName=fileDialog.GetFileName();
strExt=_T(".")+strExt;
SHFILEINFO sfi;
SHGetFileInfo(strExt,0,&sfi,sizeof(sfi),SHGFI_ICON|SHGFI_LARGEICON|SHGFI_USEFILEATTRIBUTES);
HICON hIcon=sfi.hIcon;
ImageListBmp.Add(hIcon);
m_List_Image.InsertItem(m_List_Image.GetItemCount(),strFileName,m_List_Image.GetItemCount());
UpdateData(false);
三 采用向列表框拖拽的方式添加图标
void CListTestDlg::OnDropFiles(HDROP hDropInfo)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
POINT pt;
WORD cFiles, i;
TCHAR lpszFile[MAX_PATH];
DragQueryPoint(hDropInfo, &pt);
cFiles = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
for(i = 0; i < cFiles; pt.y += 20, i++)
{
DragQueryFile(hDropInfo, i, lpszFile, sizeof(lpszFile));
TCHAR drive[_MAX_DRIVE];
TCHAR dir[_MAX_DIR];
TCHAR fname[_MAX_FNAME];
TCHAR ext[_MAX_EXT];
_wsplitpath_s(lpszFile,drive,dir,fname,ext);
SHFILEINFO sfi;
SHGetFileInfo(ext,0,&sfi,sizeof(sfi),SHGFI_ICON|SHGFI_LARGEICON|SHGFI_USEFILEATTRIBUTES);
HICON hIcon=sfi.hIcon;
ImageListBmp.Add(hIcon);
m_List_Image.InsertItem(m_List_Image.GetItemCount(),fname,m_List_Image.GetItemCount());
}
DragFinish(hDropInfo);
}
注意:定义CImagelist要在在头文件中定义
以上程序在Visual C++ 2005 MFC Dialog Unicode中调试通过