新建MFC对话框工程,在对话框上添加控件,将对话框设置为如图所示的对话框:
ID号分别设为:
查找:IDOK
....:IDC_CHOOSE
取消:IDC_CANCEL
请输入查找文件:IDC_FILENAME
请输入查找目录:IDC_FINDDIR
查找结果:IDC_RESULTLIST
为两个编辑框,列表框关联变量:
CEdit m_FindDir;
CListBox m_RetList;
CEdit m_FileName;
再在对话框类的构造函数中添加一个CString m_szFindFile变量
并添加一个函数:
void FindFile(CString szFileName);
为“查找”“取消”“选择”按钮分别建立消息响应,同时建立新添加的函数建立消息响应:
void CFindFileDlg::OnOK()
{
CString szFindDir;
m_FileName.GetWindowText(m_szFindFile);
m_FindDir.GetWindowText(szFindDir);
if (!m_szFindFile.IsEmpty() && !szFindDir.IsEmpty()) //查找文件
{
FindFile(szFindDir);
}
}
//查找文件
void CFindFileDlg::FindFile(CString szFileName)
{
CString szFindName = szFileName;
szFindName.Insert(szFileName.GetLength(), "\\*.*");
WIN32_FIND_DATA fd_Data;
memset(&fd_Data, 0, sizeof(WIN32_FIND_DATA));
HANDLE hFindFile =FindFirstFile(szFindName, &fd_Data);
if (hFindFile != NULL)
{
while (FindNextFile(hFindFile, &fd_Data))
{
if (fd_Data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY &&
(strcmp(fd_Data.cFileName, ".") != 0) &&
(strcmp(fd_Data.cFileName, "..") != 0) &&
(strcmp(fd_Data.cFileName, "...") != 0) ) //目录
{
CString szFullPath = szFileName;
szFullPath.Insert(szFullPath.GetLength(), "\\");
szFullPath.Insert(szFullPath.GetLength(), fd_Data.cFileName);
FindFile(szFullPath);
}
else if (!(fd_Data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) //文件
{
CString szFullName = szFileName;
szFullName.Insert(szFullName.GetLength(), "\\");
szFullName.Insert(szFullName.GetLength(), fd_Data.cFileName);
if (stricmp(m_szFindFile.GetBuffer(0), fd_Data.cFileName) == 0)
{
m_RetList.AddString(szFullName);
}
}
}
}
FindClose(hFindFile);
}
void CFindFileDlg::OnChoose()
{
char szBuffer[MAX_PATH] = {0};
BROWSEINFO brInfo;
memset(&brInfo, 0, sizeof(BROWSEINFO));
brInfo.pszDisplayName = szBuffer;
brInfo.lpszTitle = "文件浏览";
LPITEMIDLIST pItemList = SHBrowseForFolder(&brInfo);
if (pItemList != NULL)
{
char szDir[MAX_PATH] = {0};
SHGetPathFromIDList(pItemList, szDir);
m_FindDir.SetWindowText(szDir);
}
}
void CFindFileDlg::OnCancel()
{
CDialog::OnCancel();
}
代码实现:
如果对于这些代码里的函数调用你不懂,请在本站搜索作者“阿郎”,我写的文章里有几篇《清理垃圾文件软件源代码解析2》
系列,对这些函数做了解释。