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();
    

  • Mod

    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!


Anmelden zum Antworten