我一直在网上搜索并为这个问题奋斗了一个多小时,但似乎仍然无法正常工作。大多数人在论坛等上获得这种帮助时似乎都感到满意,但是我的仍然无法正常工作。
我试图强制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
);

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

我在这里想念什么?

最佳答案

您还可以从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;
}

07-24 15:55