CListCtrl控件获取并显示指定路径下的文件信息
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CListCtrl控件
常用操作:
1、添加列标题头:InsertColumn
2、获取与设置列宽:GetColumnWidth、SetColumnWidth
3、添加一行:InsertItem、SetItemText
4、获取与设置单元文本:GetItemText、SetItemText
5、允许多行选中时,获取选中的行数:GetSelectedCount
6、单行选中时,获取选中的行:GetSelectionMark
7、选中某行:SetItemState(n, LVIS_SELECTED, LVIS_SELECTED);取消选中的行SetItemState(n,0,-1);使用此函数前需要先调用SetFocus();
8、获取某行的状态是否为选中:GetItemState(n, LVIS_SELECTED) ==
LVIS_SELECTED
9、删除所有行:DeleteAllItems
10、删除指定列:DeleteColumn
11、删除指定行:DeleteItem
12、获取与设置列表控件的背景色:GetBkColor、SetBkColor
13、获取与设置文字背景色:GetTextBkColor、SetTextBkColor
14、获取与设置文字前景色:GetTextColor、SetTextColor
15、获取与设置Check:GetCheck、SetCheck,使用前需要设置控件属性SetExtendedStyle(LVS_EX_CHECKBOXES);使控件有勾选功能
16、获取与设置图标列表:GetImageList、SetImageList
17、获取与设置行附加数据:GetItemData、SetItemData
18、获取与设置扩展风格样式:GetExtendedStyle、SetExtendedStyle
19、设置正行选中与网格线:SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
20、让ListCtrl支持编辑的功能:
①、将属性中的 Edit Labels 设置为 True;
②、响应控件的 LVN_EDNLABELEDIT 消息,添加如下代码:
CString strText;
m_ListCtrl.GetEditControl()->GetWindowText(strText);
m_ListCtrl.SetItemText(pDispInfo->item.iItem,
pDispInfo->item.iSubItem, strText);
21、多行可选时,跳到第一个被选中的行,即使第一个被选中的行可视。
POSITION pos = pView->GetListCtrl().GetFirstSelectedItemPosition(); int nFirstSel = pView->GetListCtrl().GetNextSelectedItem(pos);
if (nFirstSel != -1)
{
pView->GetListCtrl().EnsureVisible(nFirstSel,FALSE);
}
列表中添加图标代码:
UINT nIconID[] =
{IDI_ICON1,IDI_ICON2,IDI_ICON3,IDI_ICON4,IDI_ICON5};//图标ID
m_ImageList.Create(16,16,ILC_COLOR24,sizeof(nIconID)/sizeof(UINT),0) ;//初始化CImageList类,sizeof(nIconID)/sizeof(UINT)为图标个数,后面的0表示CImageList在sizeof(nIconID)/sizeof(UINT)个图标个数的基础上可再添加多少个图标。
m_ImageList.SetBkColor(RGB(255,255,255));//设置背景色为白色
for(int i = 0; i < sizeof(nIconID)/sizeof(UINT); i++)
{
m_ImageList.Add(AfxGetApp()->LoadIcon(nIconID[i]));//将图标添加到CImageList
}
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);//设置列表控件显示图标
m_ListCtrl.InsertColumn(0,_T("第1列"),0,100);
m_ListCtrl.InsertColumn(1,_T("第2列"),0,100);
m_ListCtrl.InsertColumn(2,_T("第3列"),0,100);
m_ListCtrl.InsertItem(0,_T("数据1"),0);//后面的0表示添加CImageList 中的第0个图标
m_ListCtrl.InsertItem(1,_T("数据2"),1);//后面的1表示添加CImageList 中的第1个图标
m_ListCtrl.InsertItem(2,_T("数据3"),2);
m_ListCtrl.SetItemText(0,1,_T("01"));
m_ListCtrl.SetExtendedStyle(LVS_EX_CHECKBOXES);//设置控件有勾选功能 DWORD dwStyle = m_ListCtrl.GetExtendedStyle();
m_ListCtrl.SetExtendedStyle(dwStyle|LVS_EX_FULLROWSELECT);设置控件选中行的功能
遍历文件夹并显示文件名与图标:
CFileFind fileFind;
CString szDir("D:\\Tools");
BOOL bRet = fileFind.FindFile(szDir+"\\*.*");
while(bRet)
{
bRet = fileFind.FindNextFile();
if(fileFind.IsDots())
continue;
if(!fileFind.IsDirectory())
{
SHFILEINFO shfi;
SHGetFileInfo(fileFind.GetFilePath(),FILE_ATTRIBUTE_NORMAL,&shfi,s izeof(shfi),SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME);
int nImageID = m_ImageList.Add(shfi.hIcon);
m_ListCtrl.InsertItem(m_ListCtrl.GetItemCount(),fileFind.GetFileNa me(),nImageID);
}
}
复制列表内容
void CXXXView::OnCopydataToClipboard()
{
int nSelectCount = GetListCtrl().GetSelectedCount();
int nSelect = -1;
CString strData = _T("");
for (int i = 0; i < nSelectCount; i++)
{
//找到选择的行号
nSelect = GetListCtrl().GetNextItem(nSelect,LVNI_ALL | LVNI_SELECTED); //列数
int nColumnCount = GetListCtrl().GetHeaderCtrl()->GetItemCount();
for (int j = 0; j < nColumnCount; j++)
{
CString text;
text = GetListCtrl().GetItemText(nSelect,j);
if (j != 0)
strData += "\t";
strData += text;
}
//用\r\n来控制回车和换行
if (i != nSelectCount - 1)
strData += "\r\n";
}
//复制到剪贴板
HGLOBAL clipbordBuf = GlobalAlloc(GMEM_DDESHARE,2*(strData.GetLength() + 1));
TCHAR *pBuf = (TCHAR*)GlobalLock(clipbordBuf);
lstrcpy((LPTSTR)pBuf,(LPCTSTR)strData);
GlobalUnlock(clipbordBuf);
OpenClipboard();
EmptyClipboard();
SetClipboardData(CF_TEXT,pBuf);
CloseClipboard();
}
在非第一列中添加图标
m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_ SUBITEMIMAGES);
m_List.SetItem(0,1,LVIF_TEXT|LVIF_IMAGE,“aaa”,0,0,0,0);//在第一行第二列加入第1个图标
m_List.SetItem(i,1,LVIF_TEXT|LVIF_IMAGE,szBuffer,i,0,0,0);
使用VC实现读取指定路径下的文件,并显示所有文件的文件名和文件图标
本文转自:/chenzekai123/article/details/6522037
在windows系统下,当我们打开某个磁盘时,总会显示所有的文件,包括文件名和文件图标,采用VC的列表视图控件可以实现读取指定路径下的文件,并显示所有文件的文件名和文件图标。
先上效果图:
接下来是具体实现:
1.创建一个对话框,并在对话框中加入一个列表视图控件,控件样式是ICON,控件关联一个变量m_ListCtrl.
2.创建CImageList类,并设定列表视图控件的图象列表,示例代码如下:
Code:
m_Image.Create(GetSystemMetrics(SM_CXICON),
GetSystemMetrics(SM_CYICON),ILC_COLOR24,50,50);
m_ListCtrl.SetImageList(&m_Image,LVSIL_NORMAL);
3.采用CFileFind类查找文件的同时,用API函数SHGetFileInfo获取文件的图标,并存放到CImageList类中,再用CListCtrl类的成员方法InsertItem把文件名和文件图标一起插入,示例代码如下:
Code:
SHFILEINFO sfi;
CFileFind* fileFind=new CFileFind();
BOOL res = fileFind->FindFile("d://程序//*.*");
int i=0;
while(res)
{
res = fileFind->FindNextFile();
if(fileFind->IsDirectory())
continue;
SHGetFileInfo(fileFind->GetFilePath(),0,
&sfi,sizeof(sfi),SHGFI_ICON);
m_Image.Add(sfi.hIcon);
m_ListCtrl.InsertItem(i, fileFind->GetFileName(), i);
i++;
}
void CWAFileList::InitDefault()
{
SetExtendedStyle(GetExtendedStyle()|
LVS_EX_FULLROWSELECT);
InsertColumn(0,_T("名称"),0,150);
InsertColumn(1,_T("大小"),0,150);
//InsertColumn(2,_T("文件类型"),0,150);
InsertColumn(2,_T("修改日期"),0,150);
m_Image.Create(GetSystemMetrics(SM_CXSMICON),GetSystemM etrics(SM_CYSMICON),ILC_COLOR24,100,100);//minisize SetImageList(&m_Image,LVSIL_SMALL);//关联ImageList
CFileFind finder;
SHFILEINFOW fileinfo={0};
int nItem=0;
int nImag=0;
BOOL bWorking=finder.FindFile(_T("d:\\code\\*.*"));
//遍历目标路径,获取文件(夹)名称、图标、属性信息
while(bWorking)
{
bWorking=finder.FindNextFile();
if(finder.IsDots())
continue;
CString sPath=finder.GetFilePath();
DWORD uflag=FILE_ATTRIBUTE_NORMAL;
if(finder.IsDirectory())
{
uflag=FILE_ATTRIBUTE_DIRECTORY;
}
//文件名称及图标
::SHGetFileInfo(sPath,uflag,&fileinfo,sizeof(fileinfo),SHGFI_ICON| SHGFI_USEFILEATTRIBUTES|SHGFI_SMALLICON);
nImag=m_Image.Add(fileinfo.hIcon);
InsertItem(nItem,finder.GetFileName(),nImag);
//文件属性信息
CFileStatus status;
CFile::GetStatus(sPath,status);
//文件大小(忽略文件夹)
if(uflag==FILE_ATTRIBUTE_NORMAL)
{
CString strSize;
double size=(double)status.m_size/1024.0f;
if((UINT)size<size)
{
size+=1;
}
strSize.Format(_T("%d KB"),(UINT)size);
SetItemText(nItem,1,(LPCTSTR)strSize);
}
//文件修改日期
CTime mTime=status.m_mtime;//last modify
CString strTime=
status.m_mtime.Format(_T("%Y/%m/%d %H/%M"));
SetItemText(nItem,2,strTime);
nItem++;
}
finder.Close();
}
//获取选中的项
int nItem = m_list.GetSelectionMark();
if (nItem > -1)
{
//to do
}
也可以这么写
int item(0);
item=m_ListCtrl.GetNextItem(-1,LVNI_SELECTED);
if (item != -1)
{
m_m_ListCtrl.GetItemText(item,0);
}
映射NM_DBCLICK 消息
void CResultDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMLISTVIEW pNMLstCtl = (LPNMLISTVIEW)pNMHDR;
if(pNMLstCtl->iItem >= 0) {
CString strText;
strText.Format("Selected iItem=%d iSubItem=%d",
pNMLstCtl->iItem, pNMLstCtl->iSubItem);
MessageBox(strText);
}
*pResult = 0;
}
//清空
//1清内容
3 4 5 6 7 8 9 1m_attencetable.DeleteAllItems();//m_attencetable 是CLISTCTRL
int nColumnCount = m_attencetable.GetHeaderCtrl()->GetItemCount); //2清列头
for (int i=0;i < nColumnCount;i++)
{
m_attencetable.DeleteColumn(0);
}
m_attencetable.InsertColumn(0,L"考勤日期",LVCFMT_LEFT,120);
0 11 m_attencetable.InsertColumn(1,L"首次刷卡",LVCFMT_LEFT,120); m_attencetable.InsertColumn(2,L"末次刷卡",LVCFMT_LEFT,120); m_attencetable.InsertColumn(3,L"工作时长",LVCFMT_LEFT,100);
void CWAFileList::OnLButtonDblClk(UINT nFlags, CPoint point) {
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CListCtrl::OnLButtonDblClk(nFlags, point);
int item = 0;
item = GetNextItem(-1,LVNI_SELECTED);
if (item != -1)
{
CString strText = GetItemText(item,0);
m_sWAPath = m_sWAPath + _T("\\") + strText;
if (PathIsDirectory(m_sWAPath) || PathIsRoot(m_sWAPath))
{
DeleteAllItems();
ShowFileList(m_sWAPath);
}
}
}。