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);
}

解决方案 »

  1.   

    如果你使用mdi就可以建立多个View, 每个View对应一个Document
    如果你是使用sdi,就没有办法了
      

  2.   

    If m_ofn.Flags has the OFN_ALLOWMULTISELECT flag set//可以选多个文件
    , you should call GetStartPosition() and GetNextPathName() to retrieve a file pathname.看CFileDialog
      

  3.   

    CFileFind ff;
    bool b=ff.findFile(CString(lpPath)+"*.*");
    while(b)
    {
       b=ff.findNextFile();
       CString sFileName=ff.GetFileName();
    }
      

  4.   

    char buf[1000];
    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
      

  5.   

    char buf[1000];
    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
      

  6.   

    CFileFind ff;
    bool b=ff.findFile(CString(lpPath)+"*.*");
    while(b)
    {
       b=ff.findNextFile();
       CString sFileName=ff.GetFileName();
    }
      

  7.   

    由于你不知道该给它分配多大才合适,分多了当然没事,但会浪费空间,分少了不会返回文件名。下面的文章是解决这个问题的:
    http://www.codeproject.com/dialog/PJA_MultiSelect.asp
      

  8.   

    CString szFileFilter=
               "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();  }