我使用GetOpenFileName打开文件对话框,Flags 属性加了 OFN_ALLOWMULTISELECT值的,运行后能同时选择多个文件,
但怎么获取到我选择的文件名称呢? (读取单个文件的我会处理,多个的就不会了,MFC的就不要说了,那个我也会)。

解决方案 »

  1.   

    可以看看mfc内部是怎么实现的,估计也是掉系统API~~~
      

  2.   

    OPENFILENAME openfilename;
    ZeroMemory(&openfilename, sizeof(OPENFILENAME));
    LPTSTR szFile = new TCHAR[MAX_PATH * 101 + 1]; //最多可以选中100项
    szFile[0] = 0x0;
    TCHAR szfiletitle[MAX_PATH] = _T("\0") ; CString s_title;
    openfilename.lStructSize = sizeof(OPENFILENAME);
    openfilename.hwndOwner = m_hWnd;
    openfilename.hInstance = NULL;
    openfilename.lpstrFilter = const_def::MP3FILTER;
    openfilename.lpstrCustomFilter = NULL;
    openfilename.nMaxCustFilter = 0L;
    openfilename.nFilterIndex = 1L;
    openfilename.lpstrFile =szFile;
    openfilename.nMaxFile = MAX_PATH * 101 + 1;
    openfilename.lpstrFileTitle = NULL;
    openfilename.nMaxFileTitle = 0;
    openfilename.lpstrInitialDir = NULL ;
    openfilename.lpstrTitle = s_title;
    openfilename.nFileOffset = 0;
    openfilename.nFileExtension = 0;
    openfilename.lpstrDefExt = _T("*.txt");
    openfilename.lCustData = 0;
    openfilename.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_READONLY | OFN_ALLOWMULTISELECT | OFN_EXPLORER;
    if (GetOpenFileName(&openfilename))
    {
    LPTSTR p = szFile;
    while(*p++);
    if (*p == NULL)
    {

    }
    else // 多选
    {
    CString folder = szFile;
    while(*p)
    {

    }
    }
    }
    delete[] szFile;