编译软件:vs2013
程序功能:在选定的文件夹下查找指定文件,并将结果显示到列表控件中。
步骤:
第一步:
新建一个基于对话框的应用程序
步骤:文件-->新建-->项目-->MFC应用程序-->基于对话框-->完成
第二步:
视图-->其他窗口-->资源视图,将窗体的默认按钮删除,用工具箱添加控件
添加两个静态文本控件;添加2个文本编辑控件,ID属性自己设置(我设置的IDC_EDADD和IDC_EDFILENAME);
添加3个按钮控件,浏览(IDC_ADD),查找(IDC_Button1),停止(IDC_STOP);
添加一个列表控件(这里使用的是List Box),添加一个变量:类别control,变量名m_Filelist;此控件需要根据需求更改属性。
提示:建议大家看看List Box 和ListCtrl的区别,不要弄混淆了。如果只有一列数据,建议使用list box;ListCtrl强大得多了,支持多列显示
列表控件更改后属性如下:(你也可以进行其他的更改,不明白的地方自己百度,百度上很细)
第三步:写代码(注释上写得很详细)
在头文件搜索文件.h加入以下变量:
public:
CString strfilename;
BOOL bstop;
void FindFile(CString strPath); //自定义函数,实现查找文件
在OnInitDialog中设置初始化变量:
“浏览”按钮的实现函数(该函数用于添加要查找文件所在的文件夹):
//浏览按钮
void C搜索文件Dlg::OnBnClickedAdd()
{
// TODO: 在此添加控件通知处理程序代码
BROWSEINFO bi;//BROWSEINFO结构中包含有用户选中目录的重要信息
char buffer[MAX_PATH];
bi.hwndOwner = GetSafeHwnd();//获取窗口句柄
bi.pidlRoot = NULL;//桌面目录被使用
bi.pszDisplayName = buffer;//保存用户选中的目录字符串的内存地址
bi.lpszTitle = "选择一个文件夹"; //
bi.ulFlags = BIF_EDITBOX;//浏览对话框中包含一个编辑框
bi.lpfn = NULL;//应用程序定义的浏览对话框回调函数的地址
bi.lParam = 0;//对话框传递给回调函数的一个参数指针
bi.iImage = 0;//图像将被指定为系统图像列表中的索引值0
LPITEMIDLIST pList = NULL; //转成 LPCITEMIDLIST 这种结构的才支持打开
if ((pList = SHBrowseForFolder(&bi)) != NULL)//显示浏览窗口
{
char path[MAX_PATH];
ZeroMemory(path, MAX_PATH);//初始化为0
SHGetPathFromIDList(pList, path);//SHGetPathFromIDList把项目标志符列表转换为文档系统路径
GetDlgItem(IDC_EDADD)->SetWindowTextA(path);
}
}
自定义函数实现查找文件:
//查找文件
void C搜索文件Dlg::FindFile(CString strPath)
{
CString strtemp;
if (strPath.Right(1) != "\\") //判断文件扩展名
strtemp.Format("%s\\*.*", strPath);
else
{
strtemp.Format("%s*.*", strPath);
}
CFileFind findfile;//本地文件查找类
BOOL bfind = findfile.FindFile(strtemp);//查找文件
while (bfind)
{
bfind = findfile.FindNextFile();// 查找下一个文件
if(strfilename == findfile.GetFileName())
{
m_Filelist.AddString(findfile.GetFilePath()); //添加行(文件路径名)
}
if (findfile.IsDirectory() && !findfile.IsDots())//IsDirectory()如果是一个目录则返回true,IsDots判断是否为点
{
FindFile(findfile.GetFilePath());// GetFilePath()返回文件的完整路径
}
if (bstop)
{
AfxMessageBox("查无此文件");
return;
}
}
}
“”查找“”按钮的实现函数,该函数用于查找文件:
//查找按钮
void C搜索文件Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString strpath;
GetDlgItem(IDC_EDFILENAME)->GetWindowText(strfilename);
GetDlgItem(IDC_EDADD)->GetWindowText(strpath);
FindFile(strpath);
bstop = FALSE;
}
“停止”按钮的实现函数,终止对文件的查找:
//停止按钮
void C搜索文件Dlg::OnBnClickedStop()
{
// TODO: 在此添加控件通知处理程序代码
bstop = TRUE;
}
列表框控件代码:
//列表控件设置
void C搜索文件Dlg::OnLbnSelchangeList2()
{
// TODO: 在此添加控件通知处理程序代码
m_Filelist.SetHorizontalExtent(1000);//1000是指listbox的Item的最大长度
}
结果截图:
源代码下载地址:https://download.csdn.net/download/cai_niaocainiao/10635819