Ordner wählen mit fester Startposition des Dialoges
-
Ok, mir ist kein passender Titel eingefallen, aber es geht im Wesentlichen
darum den Pfad "d:\testdateien\north" anzeigen zu lassen.
Der User soll einen der Ordner darunter auswählen können
(z.B. d:\testdateien\north\max-muster).Mein Problem an der Sache ist, dass ich nur CSIDL verwenden kann,
aber eigentlich den obigen Pfad als Startposition des "Ordner-suchen"-
Dialoges vorgeben muss.Ich muss scheinbar eine Alternative zu SHGetSpecialFolderLocation finden.
Aber welche, damit es noch mit pidlRoot harmoniert (LPCITEMIDLIST)?BROWSEINFO bi; ZeroMemory(&bi, sizeof(BROWSEINFO)); TCHAR szDiplayName[MAX_PATH]; ZeroMemory(szDiplayName, MAX_PATH); LPITEMIDLIST lpStartFolder = NULL; SHGetSpecialFolderLocation(GetSafeHwnd(), 0, &lpStartFolder); bi.hwndOwner = GetSafeHwnd(); // bi.lpfn = BrowseCallbackProc; bi.pszDisplayName = szDiplayName; bi.lpszTitle = _T("Ordner wählen:"); bi.ulFlags = BIF_VALIDATE|BIF_USENEWUI|BIF_NEWDIALOGSTYLE; bi.pidlRoot = lpStartFolder; LPITEMIDLIST pIDList = SHBrowseForFolder(&bi); LPMALLOC pMalloc = NULL; SHGetMalloc(&pMalloc); if(pIDList != NULL){ SHGetPathFromIDList(pIDList, m_csLocation.GetBuffer(MAX_PATH)); m_csLocation.ReleaseBuffer(); pMalloc->Free(pIDList); } pMalloc->Free(lpStartFolder); pMalloc->Release();
-
Rudimentär:
SHGetDesktopFolder(&psf); psf->ParseDisplayName(NULL,NULL,root,NULL,&pidl,NULL); bi.pidlRoot = pidl; pidl = SHBrowseForFolder(&bi);pidls und andere Zeiger aber auch bitte wieder freigeben!