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..