5

我一直在网上搜索并与这件事作斗争一个多小时,但似乎仍然无法让它发挥作用。大多数人在论坛等上做到这一点时似乎很满意,但我的仍然无法正常工作。我试图强制 SHBrowseForFolder() 函数在我选择的文件夹中启动。

char current[MAX_PATH];
strcpy(current,"C:\\Users");

char outbuf[MAX_PATH];
BROWSEINFO bis;
bis.hwndOwner = NULL;
bis.pidlRoot = NULL;
bis.pszDisplayName = outbuf;
bis.lpszTitle = (LPCSTR)"HERE";
bis.ulFlags = BIF_NEWDIALOGSTYLE|BIF_RETURNONLYFSDIRS;
bis.lpfn = NULL;
bis.lParam = (LPARAM)current;

SHBrowseForFolder(
    &bis
);

看起来这应该是一个相对简单的任务。:/ 目前,上面的代码仍然显示默认:桌面文件夹。除了从特定文件夹开始之外,如果可能的话,我还希望它只显示该文件夹及以下文件夹,而不能访问父目录。

我在这里想念什么?

4

3 回答 3

3

您还可以BFFM_SETSELECTION从您的 发送消息BrowseCallbackProc,例如:

int FAR PASCAL BrowseNotify(HWND hWnd, UINT iMessage, long wParam, LPARAM lParam)
{   if (iMessage == BFFM_INITIALIZED)
    {   SendMessage(hWnd, BFFM_SETSELECTION, 1, (LPARAM) szInitialPathName);    // Set initial folder
        return 1;
    }
    return 0;
}
于 2013-07-05T07:18:17.587 回答
2

BFFCALLBACK(lpfn) 设置为BrowseCallbackProc. 从那里您可以调用SendMessagewithBFFM_SETEXPANDED来指定要在“浏览”对话框中展开的文件夹的路径。

请参阅:http: //msdn.microsoft.com/en-us/library/windows/desktop/bb773205 (v=vs.85).aspx和 http://msdn.microsoft.com/en-us/library/windows /desktop/bb762598(v=vs.85).aspx

根据我的经验,该文件夹对话框有点不稳定 - 它经常将所需的目录滚动到视图之外并且看起来不是最理想的。只是 Windows 的乐趣之一......

此外,我没有发现让它只显示该目录及其子目录的方法。父目录似乎总是在那里。

于 2013-07-04T13:50:30.730 回答
0

将 BIF.PidlRoot 设置为您不希望用户在下面浏览的 PIDL,选择并展开您最初想要关注和选择的文件夹 - 如上所述 - 它应该可以工作。

延斯。:)

于 2013-11-19T17:43:06.780 回答