Listbox Control:列表控件 List Control:列表视图控件
只能是16*16 或 32*32
BOOL Create(intcx,intcy,UINT nFlags,int nInitial,int nGrow);
CImageList::Create(32,32,ILC_COLOR32|ILC_MASK,2,1);//创建图标列表,此处32*32
//ILC_COLOR32指定颜色位数
//ILC_MASK是否启用透明
xxxDlg.h中CImageList m_imagelist_b;
CListCtrl* plst_ctl = (CListCtrl*)GetDlgItem(IDC_LIST2);
//添加图标
m_imagelist_b.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);//创建
m_imagelist_b.Add(AfxGetApp()->LoadIcon(IDR_MAINFRAME));//添加
plst_ctl->SetImageList(&m_imagelist_b, LVSIL_NORMAL);//设置
WINSHELLAPIDWORD WINAPI SHGetFileInfo(
LPCTSTR pszPath, //文件路径
DWORD dwFileAttributes, //文件属性 忽略
SHFILEINFO FAR *psfi,//返回文件信息
UINT cbFileInfo, //SHFILEINFO 结构大小
UINT uFlags //文件标志 SHGFI_ICON
);
示例代码:
CListCtrl* plst_ctl = (CListCtrl*)GetDlgItem(IDC_LIST2);
//添加图标
m_imagelist_b.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);//大图标
m_imagelist_s.Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 0);//小图标
CFileFind findfile;
int nfound = findfile.FindFile(L"C:\\Windows\\//*.*");//C:\\Windows\\为Windows目录下的
int i = 0;
while (nfound)
{
nfound = findfile.FindNextFileW();
if (findfile.IsDirectory())
{
continue;
}
SHFILEINFO finfo;
//获取文件信息,主要是图标icon
SHGetFileInfo(findfile.GetFilePath(), 0, &finfo, sizeof(finfo), SHGFI_ICON);
m_imagelist_s.Add(finfo.hIcon);
plst_ctl->InsertItem(i++, findfile.GetFileName(), m_imagelist_b.Add(finfo.hIcon));
}
plst_ctl->SetImageList(&m_imagelist_b, LVSIL_NORMAL);//大图标
plst_ctl->SetImageList(&m_imagelist_s, LVSIL_SMALL);//小图标 findfile.Close();//释放
CListCtrl::GetFirstSelectedItemPosition
POSITION GetFirstSelectedItemPosition( ) const;
//返回选中项目的位置
CListCtrl::GetNextSelectedItem
int GetNextSelectedItem( POSITION& pos ) const;
//返回选中项目的索引值
//ShellExecute函数
HINSTANCE ShellExecute(
HWND hwnd, //指定父窗口句柄,此参数可为NULL
LPCTSTR lpOperation, //操作方式
LPCTSTR lpFile, //要打开的文件名,一般是全路径的如 c:\\1.txt
LPCTSTR lpParameters, //要带的参数
LPCTSTR lpDirectory,//默认运行目录
INT nShowCmd //显示方式
);
//获取文件目录路径及文件
CListCtrl* plst_ctl = (CListCtrl*)GetDlgItem(IDC_LIST2);
//获取ListCtrl选中项的位置
POSITION pos = plst_ctl->GetFirstSelectedItemPosition();
if (pos)
{
int item_index = plst_ctl->GetNextSelectedItem(pos);
//获取选中图标的文件名
CString filename = plst_ctl->GetItemText(item_index, 0);
filename = FileDir + filename;
//TRACE("%ws \n", filename);//MFC控制台输出函数。
ShellExecute(0, NULL, filename, NULL, NULL, SW_SHOWNORMAL);//或者 ShellExecute(0, L"open", filename, NULL, NULL, SW_SHOW); 这两个函数一样
}
VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)
plst_ctl->SetExtendedStyle(LVS_EX_FULLROWSELECT);即可全行选中。