我正在使用以下代码段来启动文件夹对话框。
BROWSEINFO bi;
ZeroMemory(&bi, sizeof(bi));
TCHAR szDisplayName[MAX_PATH];
szDisplayName[0] = 'a';
bi.hwndOwner = NULL;
bi.pidlRoot = NULL;
bi.pszDisplayName = szDisplayName;
bi.lpszTitle = _T("Please select a folder to locate your PGA :");
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lParam = NULL;
bi.iImage = 0;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
TCHAR szPathName[MAX_PATH];
if (NULL != pidl)
{
BOOL bRet = SHGetPathFromIDList(pidl,szPathName);
if(FALSE == bRet)
{
return;
}
else
{
PGA_PATH.Clear();
PGA_PATH.SetWindowTextA(szPathName);//To set the user selected path to the text box
SetValudata(szPathName);//to save the user selected path to the file.
}
}
现在我想限制用户限制用户是否尝试选择某个特定文件夹(PGA)。
例如。 如果用户选择了path =
C:\Users\mm232\Desktop\PGA
C:\Users\mm232\Pictures\PGA
C:\Users\mm232\\PGA\Pictures
然后不允许用户选择路径或禁用选择。
答案 0 :(得分:1)
文件夹浏览器对话框很慢,因为它可能会启动CD驱动器并打开睡眠外部硬盘驱动器的电源。一个好的设计将允许用户在文本框中键入路径,然后在它旁边添加一个浏览按钮。然后在textbbox上完成验证,而不是在文件夹浏览对话框中。
那就是说你确实有选项可以阻止用户通过在BROWSEINFO结构的lpfn成员中传递回调函数来选择某个文件夹。回调函数可以执行以下操作:
为IFolderFilterSite处理BFFM_IUNKNOWN和QI lparam。使用您自己的IFolderFilter实现调用IFolderFilterSite :: SetFilter,它确定每个文件夹的可见性。
处理BFFM_SELCHANGED,检查lparam中传递的pidl并发送BFFM_ENABLEOK以启用/禁用OK按钮。 (可选)发送BFFM_SETSTATUSTEXT以显示无法选择文件夹的原因。