我用以下代码打开选择目录的公用对话框,每次打开对话框时默认选中的都是“我的电脑”,
怎样修改对话框打开时默认选中的目录节点?BROWSEINFO bi;
LPITEMIDLIST pIDList;
char sFolder[MAX_PATH];// 初始化结构变量
memset(&bi, 0, sizeof(BROWSEINFO));
bi.hwndOwner = m_hWnd;
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.pidlRoot = 0;
bi.lpszTitle = "保存到目录";// 打开选择目录的公共对话框
pIDList = SHBrowseForFolder(&bi);
if (NULL != pIDList && SHGetPathFromIDList(pIDList, sFolder))
{
    ...
}

解决方案 »

  1.   

    设置bi.pidlRoot = 你相选中目录的PIDL
      

  2.   

    设置bi.pidlRoot = 你想选中目录的PIDL
      

  3.   

    如何设置PIDL?比如我想在打开选择目录的公用对话框时,自动选中C:\WINDOWS目录,该怎么做?
      

  4.   

    LPSHELLFOLDER pDeskSF;
    CString ss("C:\WINDOWS");
    OLECHAR olePath[MAX_PATH];
    ULONG chEaten;
    ULONG dwAttributes;
    HRESULT hr;
    LPITEMIDLIST pidl;MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,ss.GetBuffer(0),-1,olePath,MAX_PATH);
    ss.ReleaseBuffer();
    if (SUCCEEDED(SHGetDesktopFolder(&pDeskSF)))
    {
    MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, ss.GetBuffer(0), -1, olePath, MAX_PATH);
    hr = pDeskSF->ParseDisplayName(NULL,NULL,olePath,&chEaten,&pidl,&dwAttributes); // 这里就获取了PIDL
    }
      

  5.   

    谢谢aceouter(outer)!我用了你的代码,能在打开对话框时选中C:\WINDOWS目录,但整个目录树的根变成了C:\WINDOWS,其他目录都看不到了,这还不是我需要的结果。我想要的效果是这样的:打开选择目录公用对话框时,从桌面开始的各个目录节点都在,但是我指定的目录节点已经是选中状态,不需要我一层层打开目录树寻找它。
      

  6.   

    找到解决办法了,这个老外写的选择目录对话框类,很好用:
    http://www.codeguru.com/Cpp/W-D/dislog/dialogforselectingfolders/article.php/c1941