我想使用通用文件对话框打开多个文件,在其构造函数中,使用了OFN_ALLOWMULTISELECT 属性,但是结果对话框一次性只能打开20个文件,而超过20个文件,就没有任何反应,请问是怎么回事????
谢谢!!!!!!!!!!!

解决方案 »

  1.   

    Sure!我想播放一组音乐,而后就通过CFileDialog找到这些音乐的文件名和路径。
      

  2.   

    再就是如果一次选择过多的话,其实是没有太多的实用价值的。
    你想啊,当你有大量类似的文件的时候,你会考虑把它们放到一个文件夹下面,而不会和其它的东西混在一起,所以这时你可以用文件夹选择会更加的适合。与其让用户找到那个目录再Ctrl_A还不如直接选择那个目录,你说呢?
      

  3.   

    在DoModal()前加入//增加文件名缓冲大小
    char str[1024];
    strcpy(str,"");
    dlg.m_ofn.nMaxFile=1024;
    dlg.m_ofn.lpstrFile=str;
      

  4.   

    static TCHAR szOldDir[MAX_PATH] = {0};
    OPENFILENAME ofn;
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.hwndOwner = GetSafeHwnd();
    ofn.lpstrFile = new TCHAR[MAX_PATH * 500];
    ofn.nMaxFile = MAX_PATH * 500;
    ZeroMemory(ofn.lpstrFile, ofn.nMaxFile * sizeof(TCHAR));
    ofn.lpstrFilter = "All Files\0*.*\0\0";
    ofn.nFilterIndex = 0;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = szOldDir;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER | OFN_HIDEREADONLY;

    // Display the Open dialog box. 
    CStringArray arFiles;
    if (GetOpenFileName(&ofn)) 
    {
    LPCTSTR lpFile = ofn.lpstrFile;
    if (lpFile[lstrlen(lpFile) + 1] == 0)//one file
    {
    lstrcpy(szOldDir, theApp.m_pFileSync->m_pICommon->GetFilePath(ofn.lpstrFile));

    arFiles.Add(lpFile);
    }
    else
    {
    lstrcpy(szOldDir, ofn.lpstrFile);
    lpFile += lstrlen(lpFile) + 1;//first file
    while(lpFile[0] != 0)
    {
    CString strFilePath(ofn.lpstrFile);
    strFilePath.TrimRight('\\');
    strFilePath += CString("\\") + lpFile;

    arFiles.Add(strFilePath);

    lpFile += lstrlen(lpFile) + 1;//Next file
    }
    }
    }
    //AddFileTo(arFiles); delete[] ofn.lpstrFile;