我正在开发 and 的替代IFileOpenDialog
品IFileSaveDialog
。
我几乎让它工作(至少IFileOpenDialog
),但是当我想返回IShellItem
代表新文件名(用户选择保存在GetResult()
方法中)时,我无法SHParseDisplayName
使用这个新文件名。我总是收到错误"The system cannot find the file specified"
。
我将欣赏一些示例或其他解决方案,也许可以解决我的问题。
编辑:
HRESULT CFileSaveDialogProxy::GetResult( __RPC__deref_out_opt IShellItem **ppsi)
{
//return m_Original->GetResult(ppsi);
WCHAR pszPath[MAX_PATH] = {0};
HRESULT hr = ERROR_CANCELLED;
if (m_SelectedFiles.size() > 0)
{
QString s = m_SelectedFiles.at(0);
s.replace(QString("/"),QString("\\"));
s.toWCharArray(pszPath);
//PCIDLIST_ABSOLUTE pIdL = ILCreateFromPath(pszPath);
PIDLIST_ABSOLUTE pIdL = NULL;
SFGAOF out;
hr = SHParseDisplayName(pszPath,NULL,&pIdL,SFGAO_FILESYSTEM,&out);
if (SUCCEEDED(hr))
{
hr = SHCreateItemFromIDList(pIdL, IID_PPV_ARGS(ppsi));
}
}
return hr;
}