我在对话框上添加了一个按钮,用来向我的列表框中添加MP3文件,对话框打开后每次只能添加一个文件;怎么实现:按住shift选择多个文件同时添加到列表框呢???
希望各位大侠指教,我的代码如下:
CString strFilter;
strFilter="所有支持文件(*.mp3,*.wav,*.wma)|*.mp3;*.wav;*.wma||";
CFileDialog fdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,strFilter);
if(fdlg.DoModal()==IDOK)
{
       CString strFileName=fdlg.GetPathName();        
  
   m_strPlayListArray.RemoveAll();
   m_strPlayListArray.Add(strFileName);
   CString strList,strFile,str;
   strFile=GetFileTitle(strFileName);
//   str=;
   strList.Format(_T("01  %s"),strFile);
   m_pPlayListDlg->m_playlist.ResetContent();
   m_pPlayListDlg->m_playlist.AddString(strList);
          }

解决方案 »

  1.   


           CString strFilter,strList;
    int nPos;
    strFilter=_T("所有支持文件(*.mp3,*.wav,*.wma)|*.mp3;*.wav;*.wma||");
    CFileDialog fdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT,strFilter);
    CArray<CString> m_strPlayListArray,m_FileTileArray;
    if(fdlg.DoModal()==IDOK)
    {
    CString strFileName;//=fdlg.GetFileName();    
    POSITION   pos  =  fdlg.GetStartPosition(); 
    while(pos!=NULL)
    {
    //m_strPlayListArray.RemoveAll();
    strFileName = fdlg.GetNextPathName(pos);
    nPos = strFileName.ReverseFind(_T('\\'));
    strList = strFileName.Right(nPos);
    m_strPlayListArray.Add(strFileName); //完整的文件路径
    m_FileTileArray.Add(strList);        //文件名
    }

    ASSERT(m_FileTileArray.GetCount()!=0);
    for (int i=0;i<m_FileTileArray.GetCount();++i)
    {
    strList.Format(_T("%d.%s"),i,m_FileTileArray[i]);
    //m_PlayList.ResetContent();
    m_PlayList.AddString(m_FileTileArray[i]);
    }
    VC2010+WIN7 运行成功
      

  2.   

    这样做了还是不行啊、
    按住shift仍然不能实现多选、
      

  3.   

    实现这个功能关键是对话框风格的设置
    OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING
      

  4.   


    CFileDialog fdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT,strFilter);
      

  5.   

    新的问题又出现了,可以通过上述方式向列表框中加入文件,但是每次最多只能添加10个,这是为什么呢?
    难道系统默认的CStringArray的大小就是10吗???
      

  6.   

    CFileDialog 使用 OFN_ALLOWMULTISELECT 标志选择多个文件