MFC CFileDialog选中多个路径文件并获取每个文件具体路径

bool MultiSelectFile(std::vector<CString>& vFiles, CWnd* pParentWnd)
{
    CFileDialog dlg(TRUE, _T("打开"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,
        _T(""), pParentWnd);
    // 单个文件路径不能超过MAX_PATH:260 
    // 具体参考 dlgfile.cpp 962 TCHAR strPath[_MAX_PATH];
    // 若要突破上限需要重载该类,MSDN上有相关帮助
    DWORD MAXFILE = 4000 * MAX_PATH;
    dlg.m_ofn.lpstrFile = new TCHAR[MAXFILE];
    memset(dlg.m_ofn.lpstrFile, 0, MAXFILE);
    dlg.m_ofn.nMaxFile = MAXFILE;
    INT_PTR nResult = dlg.DoModal();
    if (nResult != IDOK)
        return false;

    IShellItemArray *pResult = dlg.GetResults();
    DWORD dwCount = 0;
    IShellItem *pItem;
    WCHAR *pFilePath;
    pResult->GetCount(&dwCount);
    for (DWORD i = 0; i < dwCount; i++)
    {
        pResult->GetItemAt(i, &pItem);
        pItem->GetDisplayName(SIGDN_FILESYSPATH, &pFilePath);
        CString sfilename = (CString)pFilePath;
        vFiles.push_back(sfilename);
    }
    delete[] dlg.m_ofn.lpstrFile;
    return vFiles.empty() ? false : true;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值