【发布时间】:2019-11-24 15:05:40
【问题描述】:
在我的 C++ Win 32 应用程序中,我正在创建一个对话框以使用 IFileOpenDialog 选择一个文件夹。请看下面的代码:
HRESULT DialogService::CreateDialogToPickFolder(HWND hWnd)
{
IFileOpenDialog* pPickFolderDialog = NULL;
IShellItem* pPickedFolder = NULL;
HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pPickFolderDialog));
if (SUCCEEDED(hr))
{
DWORD dialogOptions;
hr = pPickFolderDialog->GetOptions(&dialogOptions);
if (SUCCEEDED(hr))
{
hr = pPickFolderDialog->SetOptions(dialogOptions | FOS_PICKFOLDERS);
if (SUCCEEDED(hr))
{
hr = pPickFolderDialog->Show(hWnd);
if (SUCCEEDED(hr))
{
hr = pPickFolderDialog->GetResult(&pPickedFolder);
if (SUCCEEDED(hr))
{
PWSTR pszFolderPath = NULL;
hr = pPickedFolder->GetDisplayName(SIGDN_FILESYSPATH, &pszFolderPath);
if (SUCCEEDED(hr))
{
// Some code...
}
}
pPickedFolder->Release();
}
}
}
pPickFolderDialog->Release();
}
return hr;
}
我无法处理以下问题。如果我没有选择文件夹(“文件夹” 字段,在对话框中,为空)并单击“选择文件夹”按钮(即确定),代码行
hr = pPickedFolder->GetDisplayName(SIGDN_FILESYSPATH, &pszFolderPath);
写 先前选择到 pszFolderPath 变量中的路径并关闭对话框。但我想要 以确保在这种情况下对话框保留在屏幕上,并且 pszFolderPath 的值保持为 0x00000000。因为只有当用户真正选择了文件夹时,对话框才应该关闭,并且所选文件夹的名称显示在对话框的“文件夹”字段中。 (当然,如果要关闭对话框,用户单击“选择文件夹”按钮。这是不言而喻的。) 在未选择文件夹时单击“确定”按钮时,如何防止对话框关闭?请帮帮我。
【问题讨论】:
-
许多用户没有在选定的子文件夹中单击“确定”。相反,他们倾向于进入文件夹,然后单击“确定” - 您将获得当前显示的文件夹的路径(正如他们所期望的那样)。
-
附带说明,无论
pPickFolderDialog->GetResult()成功还是失败,都会调用pPickedFolder->Release()。它需要移动到它上面的大括号内