char buf[1024];
BROWSEINFO bi;
ITEMIDLIST *pidl;
bi.hwndOwner       = m_hWnd;
bi.pidlRoot        = NULL;
bi.pszDisplayName  = buf;
bi.lpszTitle       = "目录";               
bi.ulFlags         = BIF_RETURNONLYFSDIRS; 
bi.lpfn            = NULL;
bi.lParam          = 0;
bi.iImage          = 0;pidl = SHBrowseForFolder(&bi);
if ( NULL == pidl ) return;
if ( ! SHGetPathFromIDList(pidl,buf) ) return;
这样添加了“C:\”后,可再次添加“C:\”,
请问若想要添加的路径不重复,如何实现?

解决方案 »

  1.   

    int CALLBACK BrowseCallbackProc(HWND hWnd,UINT msg,LPARAM lParam,LPARAM lpData)
    {
    if((msg & BFFM_INITIALIZED) == BFFM_INITIALIZED)
    SetWindowText(hWnd,(char *)lpData);
    return 0;
    }BOOL GetPath(char * szPath, char * szTitle, char * szDlgTitle)
    {
    BROWSEINFO bi;
    LPITEMIDLIST lpi; bi.hwndOwner = m_hWnd;
    bi.pidlRoot = NULL;
    bi.pszDisplayName = NULL;
        bi.lpszTitle = szTitle;
        bi.ulFlags = BIF_RETURNONLYFSDIRS|BIF_RETURNFSANCESTORS;
        bi.lpfn = (BFFCALLBACK)BrowseCallbackProc;
        bi.lParam = (LPARAM)szDlgTitle;
    bi.iImage = 0;
    lpi = SHBrowseForFolder(&bi);
    if(lpi == NULL) return FALSE; LPMALLOC     pMalloc;
    SHGetMalloc(&pMalloc);
    SHGetPathFromIDList(lpi,szPath);
    pMalloc->Free(lpi);
    pMalloc->Release();
    return TRUE;
    }