void CMyFindFile::loopFile(LPCTSTR dir){
cont ++;
CFileFind findF ;
CString showMsg;
showMsg.Format("正在遍历目录:\r\n%s",dir);
::SendMessage(GetDlgItem(wnd,IDC_SHOWMULU),WM_SETTEXT,0,(LPARAM)showMsg.GetBuffer()); //
CString dirs(dir);
dirs += "\\*.*";
BOOL bWorking = findF.FindFile(dirs);
while(bWorking){
bWorking = findF.FindNextFileA();
if(findF.IsDots())
continue;
CString filepath = findF.GetFilePath();
if(findF.IsDirectory()){ //目录
directs.push_back(filepath);
loopFile(filepath);
}else{ //文件
CString fname = findF.GetFileName();
CString ref = fname.Right(fname.GetLength()-fname.ReverseFind('.')-1);
if(cparStr != ""){
if(ref == cparStr)
fils.push_back(filepath);
}else{
fils.push_back(filepath);
}
} }
}
我想实现在遍历目录的时候,向对话框发送当前正在遍历哪个目录?这段代码为什么执行完了才会在对话框中显示呢?应该怎么改程序啊?还有一个问题:LPARAM是long类型的,为什么可以把字符串赋值给LPARAM啊?C++中的long类型可以保存字符串?
都是字节存储的,
赋值过去的是指针,参见msdn
if(findF.IsDirectory()){ //目录
directs.push_back(filepath);
loopFile(filepath);
}在对话框添加一个文本静态变量,然后将filepath赋值给它,用SetWindowText显示。
CWnd * pStaticWnd = GetDlgItem(IDC_STATIC);
pStaticWnd->SetWindowText(filepath);