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类型可以保存字符串?

解决方案 »

  1.   

    还有一个问题:LPARAM是long类型的,为什么可以把字符串赋值给LPARAM啊?C++中的long类型可以保存字符串?
    都是字节存储的,
      

  2.   

    因为对话框没机会显示,不要发消息,直接改对话框的文本好了;
    赋值过去的是指针,参见msdn
      

  3.   

    long当ulong来使用,传递字符串的指针过去,前台通过指针读取字符串就可以了.我的博客有篇postthreadmessage你看下就知道了
      

  4.   


           if(findF.IsDirectory()){     //目录
                directs.push_back(filepath);
                loopFile(filepath);
            }在对话框添加一个文本静态变量,然后将filepath赋值给它,用SetWindowText显示。
      

  5.   

    默认只有一个主线程的,发消息也没用,当前动作阻塞了消息循环,就像你在一个onButton里写个死循环,一点就会没响应一样。
      

  6.   


    CWnd * pStaticWnd = GetDlgItem(IDC_STATIC); 
    pStaticWnd->SetWindowText(filepath);