我有一个用 C++ 编写的 Windows 应用程序。应用程序在隐藏目录中生成某些配置文件。我想为用户提供从我的应用程序中打开该目录的选项。单击该选项应打开带有输入目录位置的 Windows 资源管理器之类的对话框。我花时间搜索类似的 api,但最终会出现某些对话框,例如“DlgDirListComboBoxW”或“GetOpenFileName”或“GetSaveFileName”。我正在寻找一个 api 来打开普通的 Windows 资源管理器,比如带有输入目录位置的对话框。如果 api 属于 CommonDialogs 部分,那将非常有帮助。
问问题
925 次
2 回答
1
您可以使用SHBrowseForFolder
它显示了一个与此类似的对话框:
这是如何使用它的示例:
BOOL GetFolder(LPCSTR folderpath,
LPCSTR szCaption,
HWND hOwner /*= NULL*/)
{
BOOL retVal = FALSE;
// The BROWSEINFO struct tells the shell
// how it should display the dialog.
BROWSEINFO bi;
memset(&bi, 0, sizeof(bi));
bi.ulFlags = BIF_USENEWUI;
bi.hwndOwner = hOwner;
bi.lpszTitle = szCaption;
// must call this if using BIF_USENEWUI
::OleInitialize(NULL);
// Show the dialog and get the itemIDList for the
// selected folder.
LPITEMIDLIST pIDL = ::SHBrowseForFolder(&bi);
if(pIDL != NULL)
{
// Create a buffer to store the path, then
// get the path.
char buffer[_MAX_PATH] = {'\0'};
if(::SHGetPathFromIDList(pIDL, buffer) != 0)
{
// Set the string value.
folderpath = buffer;
retVal = TRUE;
}
// free the item id list
CoTaskMemFree(pIDL);
}
::OleUninitialize();
return retVal;
}
于 2015-01-21T07:30:33.590 回答
1
怎么样:
HWND hWndOwner = NULL;
ShellExecute(
hWndOwner,
_T("explore"),
_T("c:\\some\\path"),
NULL,
NULL,
SW_SHOWNORMAL);
如果您愿意,可以设置hWndOwner
为主窗口句柄,并且可以从各种其他选项中进行选择。
有关更多信息和使用详情,请查看 MSDN 页面ShellExecute
。
于 2015-01-21T06:59:23.560 回答