Funktion zum BrowseDlg funzt net



  • Hi!

    int FolderBox(HWND hWnd, LPWSTR lpCaption, LPWSTR lpPath)
    {
    	BROWSEINFO bi;
    	WCHAR szPath[MAX_PATH];
    	LPITEMIDLIST lpItemList;
    
    	lstrcpy(szPath, lpPath);
    	CoInitialize(&lpItemList);
    
    	ZeroMemory(&bi, sizeof(BROWSEINFO));
    	bi.hwndOwner = hWnd;
    	bi.lpszTitle = lpCaption;
    	bi.pszDisplayName = szPath;
    	bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_DONTGOBELOWDOMAIN | BIF_NEWDIALOGSTYLE;
    
    	lpItemList = SHBrowseForFolder(&bi);
    
    	if (lpItemList == NULL)
    		return IDCANCEL;
    
    	SHGetPathFromIDList(lpItemList, szPath);
    
    	IMalloc* pMalloc = NULL;
    	if (SUCCEEDED(SHGetMalloc(&pMalloc)))
    	{
    		pMalloc->Free((PVOID)lpItemList);
    		pMalloc->Release();
    	}
    
    	CoUninitialize();
    
    	lstrcpy(lpPath, szPath);
    
    	return IDOK;
    }
    

    Diese Funktion soll eigentlich einen Ordnerwahldialog aufrufen. Sowas wie MessageBox, nur für diesen Dialog.

    Aber der Standardordner (bi.pszDisplayName) wird nicht angezeigt.

    Die Funktion wird so aufgerufen:

    WCHAR szPath[MAX_PATH];
    
    // Standardordner
    lstrcpy(szPath, L"C:\\");
    
    FolderBox(0, L"Ordnerwahl", szPath);
    

    Aber es wird nicht von c angefangen.

    Danke.



  • MSDN schrieb:

    pszDisplayName
    Address of a buffer to receive the display name of the folder selected by the user. The size of this buffer is assumed to be MAX_PATH characters.

    edit: Den Ordner, in dem der Dialog starten soll, kannst du in deiner BrowseCallbackProc mittels BFFM_SETSELECTION setzen. Deine BrowseCallbackProc musst du natürlich in BROWSEINFO über lpfn setzen, dazu den BROWSEINFO.lParam auf den Pfad setzen, damit du den in der Callback-Funktion nutzen kannst.



  • Du musst BROWSEINFO::pidlRoot ausfüllen, steht alles in der MSDN.
    Das ist das Startverzeichniss.

    Außerdem denke ich das der Benutzer schon noch allein nach C: kommt



  • Blaze schrieb:

    Du musst BROWSEINFO::pidlRoot ausfüllen, steht alles in der MSDN.
    Das ist das Startverzeichniss.

    Bist du dir sicher, dass man dann noch in "untere", bzw "Brüder-" Pfade, also z.B. nach 😨 navigieren kann? Wenn ja, ist mein obiger Post (bzw das edit) übrigens zu vergessen..


Anmelden zum Antworten