mfc使用CListCtrl显示文件名和图标出现的部分问题

        最近在研究c++文件管理的项目,遇到部分问题总结一下。仅做笔记。

    1.mfc使用CListCtrl显示文件设置。属性Accept File为True,view设置icon显示大图标report为列表;

    2.定义CImageList为全局变量。未设置成全局变量或公有会导致图标无法显示;

        CImageList m_icon;//定义列表头的图标列表 

    3.出现不能显示,只能显示部分图标或者只显示第一个图标问题。可能是未将设置函数放到初始化里;

	m_icon.Create(32, 32, ILC_COLOR32 | ILC_MASK, 1, 1);//第一个‘1’代表加载图标的个数,加载多个图标也可
	m_list.SetImageList(&m_icon, LVSIL_NORMAL);

    4.mfc选择文件夹问题。CFileDialog 中没有直接选定文件夹的方法。所以借鉴了些代码;

        TCHAR    szFolderPath[MAX_PATH] = { 0 };
	CString    strFolderPath = TEXT("");
	BROWSEINFO    sInfo;
	::ZeroMemory(&sInfo, sizeof(BROWSEINFO));
	sInfo.pidlRoot = 0;
	sInfo.lpszTitle = _T("选择文件夹路径");
	sInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_EDITBOX | BIF_DONTGOBELOWDOMAIN;
	sInfo.lpfn = NULL;

	// 显示文件夹选择对话框    
	LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&sInfo);
	if (lpidlBrowse != NULL)
	{
		// 取得文件夹名    
		if (::SHGetPathFromIDList(lpidlBrowse, szFolderPath))
		{
			strFolderPath = szFolderPath;
		}
	}
	if (lpidlBrowse != NULL)
	{
		::CoTaskMemFree(lpidlBrowse);
	}

 

    5.检索文件与显示。因需求只实现了检索指定文件夹中全部文件的文件名和图标。

 

    m_list.DeleteAllItems();
    CFileFind finder;
    CString strDirectory = strFolderPath;
    if (strDirectory.Right(1) != "\\")
        strDirectory += "\\";
    strDirectory += "*.*";
    CString strFile;
    BOOL IsFind = finder.FindFile(strDirectory);
    while (IsFind)
    {
	IsFind = finder.FindNextFile();
	if (finder.IsDots())
		continue;//“.”,不扫描
	else if (finder.IsDirectory())
		continue;//目录,不扫描
	else {
		SHFILEINFO info;
		strFile = finder.GetFileName();
		CString temp = strDirectory;
		int index = temp.Find(_T("*.*"));
		temp.Delete(index, 3);
		SHGetFileInfo(temp + strFile, FILE_ATTRIBUTE_NORMAL, &info, sizeof(&info), SHGFI_ICON | 
			SHGFI_ICONLOCATION | SHGFI_SYSICONINDEX |SHGFI_USEFILEATTRIBUTES | SHGFI_DISPLAYNAME);
		//IconID = info.iIcon;图标代码
		m_icon.Add(info.hIcon);
		m_list.InsertItem(m_list.GetItemCount(), info.szDisplayName, m_list.GetItemCount());
		//第一个参数为第几个文件,最后一个参数为list中图标索引,为了简洁直接对应。
	}
    }

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值