1、是这样的:我想在一个应用程序中点击“文件”->“打开”之后,弹出一个对话框,然后我选定多个文件。点击“打开”之后在应用程序编辑框的中显示所选中的所有文件的文件名和路径。
问题是:如何实现读到多个文件及显示多个文件?用什么方法呢?thanks!
public:
CString FilePathname;
CString FileName;
void COpenDlgView::OnFileopen()
{
CFileDialog dlg( TRUE,_T("TXT"),_T("*.TXT"),
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
_T("文本文件 (*.TXT)|*.TXT|")); if(IDOK==dlg.DoModal())
{
FilePathname.Format("%s %s","filepath:",dlg.GetPathName());
FileName.Format("%s %s","filename:",dlg.GetFileName());
}
Invalidate();
}void COpenDlgView::OnDraw(CDC* pDC)
{
COpenDlgDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(0,0,FileName);
pDC->TextOut(0,40,FilePathname);
}
问题是:如何实现读到多个文件及显示多个文件?用什么方法呢?thanks!
public:
CString FilePathname;
CString FileName;
void COpenDlgView::OnFileopen()
{
CFileDialog dlg( TRUE,_T("TXT"),_T("*.TXT"),
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
_T("文本文件 (*.TXT)|*.TXT|")); if(IDOK==dlg.DoModal())
{
FilePathname.Format("%s %s","filepath:",dlg.GetPathName());
FileName.Format("%s %s","filename:",dlg.GetFileName());
}
Invalidate();
}void COpenDlgView::OnDraw(CDC* pDC)
{
COpenDlgDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(0,0,FileName);
pDC->TextOut(0,40,FilePathname);
}
如果你是使用sdi,就没有办法了
, you should call GetStartPosition() and GetNextPathName() to retrieve a file pathname.看CFileDialog
bool b=ff.findFile(CString(lpPath)+"*.*");
while(b)
{
b=ff.findNextFile();
CString sFileName=ff.GetFileName();
}
memset(buf,NULL,1000); CFileDialog FileDlg(TRUE,"*.exe",NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER ,
"All files (*.*)|*.*||");
FileDlg.m_ofn.nMaxFile=1000;
FileDlg.m_ofn.lpstrFile=buf; if(FileDlg.DoModal()==IDOK)
{
POSITION pos=FileDlg.GetStartPosition();
while(pos)
{
MessageBox(FileDlg.GetNextPathName(pos));
}
}
注意:buf得设得足够大,不然你在选择太多文件后FileDlg.DoModal()不会等于IDOK
memset(buf,NULL,1000); CFileDialog FileDlg(TRUE,"*.exe",NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER ,
"All files (*.*)|*.*||");
FileDlg.m_ofn.nMaxFile=1000;
FileDlg.m_ofn.lpstrFile=buf; if(FileDlg.DoModal()==IDOK)
{
POSITION pos=FileDlg.GetStartPosition();
while(pos)
{
MessageBox(FileDlg.GetNextPathName(pos));
}
}
注意:buf得设得足够大,不然你在选择太多文件后FileDlg.DoModal()不会等于IDOK
bool b=ff.findFile(CString(lpPath)+"*.*");
while(b)
{
b=ff.findNextFile();
CString sFileName=ff.GetFileName();
}
http://www.codeproject.com/dialog/PJA_MultiSelect.asp
"mp3 file(*.mp3)|*.mp3|"
"dat file(*.mp3)|*.dat|"
"wav file(*.wav)|*.wav|"
"mpg file(*.mpg)|*.mpg|"
"All files(*.*)|*.*|";TCHAR* szSelections=NULL;CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,(LPCSTR)szFileFilter,this);szSelections=new TCHAR[1000];
memset(szSelections,NULL,1000);
dlg.m_ofn.lpstrFile=szSelections;
dlg.m_ofn.nMaxFile=1000;
if(dlg.DoModal()==IDOK)
{
POSITION pos;
m_control.SetFileName(NULL);
m_List.ResetContent();
CString filename;
for(pos=dlg.GetStartPosition();pos;)
{
CString str;
str=dlg.GetNextPathName(pos);
m_List.AddString(str);//m_List是ListBox的控制变量
//你可以把文件名放到ListBox中,需要的时候再从里边取出来.
}
m_count=m_List.GetCount(); }