我正在使用带有新对话框样式的 SHBrowseForFolder,它为您提供了一个“制作新文件夹”按钮
我在 Windows XP 中遇到了一些问题。
行为是这样的:
1)首先,当我调用对话框时,行为是通常的(即,它正在选择当前文件夹。但焦点不在树项上(变暗)。
如果我在此状态下单击“创建新文件夹”按钮,则正在创建一个新文件夹,但它未处于选定状态(即,当我们创建一个新文件夹时,它将允许您使用项目和编辑框上的选择重命名文件夹)。
如果我选择目录(即,将焦点设置到项目),然后单击新文件夹创建处于选定状态的文件夹。(在 Windows 8、Windows 7 和 Windows Vista 中运行良好)任何人都遇到过这个问题。
有什么解决办法吗?
bool GetFolder(std::string& folderpath, const char* szCaption = NULL, 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_NEWDIALOGSTYLE|BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS;
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 = "";
retVal = true;
}
// free the item id list
CoTaskMemFree(pIDL);
}
::OleUninitialize();
return retVal;
}