SHBrowseForFolder , BROWSEINFO
-
Dazu mußt Du die CALLBACK-Funktion verwenden. Wenn diese dann die Nachricht BFFM_INITIALIZED erhält, kannst Du den Ornder per BFFM_SETSELECTION ändern. Die Beschreibung der Messages findest Du in der Beschreibung zur CallBack Funktion.
-
schau mal unter IShellFolder::ParseDisplayName
Translates a file object's or folder's display name into an item identifier list.
wenn du nicht weiterkommst meld dich wieder.
btw: das was -King- gepostet hat brauchst du nur, wenn du einen ordner vorselektieren willst (aber nicht zum root machen).ach ja bevor du fragst, wenn du probleme mit dem unicode string hast -> MultiByteToWideChar
The MultiByteToWideChar function maps a character string to a wide-character (Unicode) string. The character string mapped by this function is not necessarily from a multibyte character set. images/smiles/icon_smile.gif
[ Dieser Beitrag wurde am 31.01.2002 um 18:18 Uhr von kwoTx editiert. ]
-
Original erstellt von kwoTx:
**btw: das was -King- gepostet hat brauchst du nur, wenn du einen ordner vorselektieren willst (aber nicht zum root machen).
**Genau das will er doch auch:
Wenn der Standarddialog zum Auswählen des Ordners geöffnet wird, würd ich gerne automatisch in ein bestimmtes Verzeichnis springen.
Oder versteh ich da was falsch?
-
also ich hab das hier gelesen: Wie bekomme ich da den Pfad rein, den ich als "rrot folder" will? (was immer rrot heisst images/smiles/icon_wink.gif)
is ja auch egal, jetzt weiss er zu beidem etwas, egal was er machen wollte ...
-
@kwoTx: ich hab mal deinen Ansatz ausprobiert, aber ich bekomms nicht hin. Folgender Code führt zu einer Win-Schutzverletzung:
BROWSEINFO BI; BI.hwndOwner = hwnd; BI.pidlRoot = NULL; BI.pszDisplayName = folder; BI.lpszTitle = "Choose folder"; BI.ulFlags = NULL; BI.lpfn = NULL; LPITEMIDLIST pidl; static TCHAR szPath[MAX_PATH * 2] = ""; WCHAR root[MAX_PATH]; MultiByteToWideChar(CP_THREAD_ACP,MB_USEGLYPHCHARS,"c:\\files\\N.dat",-1,root,MAX_PATH); IShellFolder *psf = NULL; psf->ParseDisplayName(hwnd,NULL,root,NULL,&pidl,NULL); BI.pidlRoot = pidl; pidl = SHBrowseForFolder(&BI); SHGetPathFromIDList(pidl, szPath);
Bei der Zeile
psf->ParseDisplayName(hwnd,NULL,root,NULL,&pidl,NULL);
stürzt das Prog ab. Wo liegt denn der Fehler?Gruß Jochen
-
Original erstellt von GuybrushThreepwood:
**```cpp
IShellFolder *psf = NULL;
psf->ParseDisplayName(hwnd,NULL,root,NULL,&pidl,NULL);Du rufst die Methode über eine NULL-Pointer auf! Du mußt Dir doch erst einmal einen gültigen Pointer besorgen. Verwende hierfür SHGetDesktopFolder().
[ Dieser Beitrag wurde am 04.02.2002 um 12:45 Uhr von -King- editiert. ]
[ Dieser Beitrag wurde am 04.02.2002 um 12:46 Uhr von -King- editiert. ]
[ Dieser Beitrag wurde am 04.02.2002 um 12:47 Uhr von -King- editiert. ]
-
@ King: Danke, jetzt ist die Schutzverletzung weg.
Aber es geht immer noch nicht!
Wenn ich mit SHBrowseForFolder() den Standarddialog aufrufe, wird der Ordner "c:\files\" immer noch nicht angezeigt!
Sollte doch aber jetzt gehen, oder?BROWSEINFO BI; BI.hwndOwner = hwnd; BI.pidlRoot = NULL; BI.pszDisplayName = folder; BI.lpszTitle = "Choose folder"; BI.ulFlags = NULL; BI.lpfn = NULL; LPITEMIDLIST pidl; static TCHAR szPath[MAX_PATH * 2] = ""; WCHAR root[MAX_PATH]; MultiByteToWideChar(CP_THREAD_ACP,MB_USEGLYPHCHARS,"c:\\files\\N.dat",-1,root,MAX_PATH); IShellFolder *psf = NULL; SHGetDesktopFolder(&psf); psf->ParseDisplayName(hwnd,NULL,root,NULL,&pidl,NULL); BI.pidlRoot = pidl; pidl = SHBrowseForFolder(&BI); SHGetPathFromIDList(pidl, szPath);
MfG
Jochen
-
so auf den ersten blick: MultiByteToWideChar(CP_THREAD_ACP,MB_USEGLYPHCHARS,"c:\\files\\N.dat",-1,root,MAX_PATH);
du willst c:\files\ als root haben... warum dann N.dat mit angeben?
existiert die datei, wird sie selbst als root dargestellt; macht uU sogar noch sinn bei archiven. wenn nicht -> standardrootach und nicht vergessen das IShellFolder interface zu releasen.
-
Danke, werd ich versuchen.
ach und nicht vergessen das IShellFolder interface zu releasen.
Was soll ich machen? Ich versteh kein Wort davon.
Gruß Jochen
-
Hi !
MultiByteToWideChar (CP_THREAD_ACP,MB_USEGLYPHCHARS,"c:\\files",-1,root,MAX_PATH);
und
MultiByteToWideChar(CP_THREAD_ACP,MB_USEGLYPHCHARS,"c:\\files\",-1,root,MAX_PATH);
funktionieren auch nicht! Nach wie vor ist der "Arbeitsplatz" mein root und nicht das angegebene Verzeichnis.
Mir fällt jetzt wirklich nix mehr ein. Hat noch jemand ne Idee? images/smiles/icon_confused.gif
Gruß Jochen
-
wenn de willst schicks mal her, dann schau ichs mir ma an: kwoTx@gmx.de
(dumme frage: der ordner c:\files existiert, oder?)