Вопрос по окну выбора каталогов (то, в котором каталоги - в виде дерева и нет файлов)
LPITEMIDLIST lpItemDlist;
char szWorkDir[256]; // будет хранить возвращаемое значение
BROWSEINFO bi = { NULL, NULL, szWorkDir,
"Выберите папку для резервирования:",
BIF_EDITBOX, NULL, NULL, 0 };
lpItemDlist = SHBrowseForFolder(&bi); // выводим диалоговое окно
SHGetPathFromIDList(lpItemDlist, szWorkDir); // получаем путь (szWorkDir)
Все OK, окно работает. Но как мне передать в него ту папку, на которой надо раскрыть дерево при старте окна?
В структуре BROWSEINFO есть член pidlRoot, который должен хранить путь к этой папке:
typedef struct _browseinfo {
HWND hwndOwner;
LPCITEMIDLIST pidlRoot;
LPTSTR pszDisplayName;
LPCTSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
Член pidlRoot является указателем на структуру ITEMIDLIST, член которой - экземпляр структуры SHITEMID. Как связать то, чем заполняется SHITEMID с путем к папке, я не понимаю.
Пожалуйста, объясните мне, как тут быть.
С уважением, Дмитрий
Цитата:
Originally posted by Doomych
Вызываю окно выбора каталогов (то, в котором каталоги - в виде дерева и нет файлов):
LPITEMIDLIST lpItemDlist;
char szWorkDir[256]; // будет хранить возвращаемое значение
BROWSEINFO bi = { NULL, NULL, szWorkDir,
"Выберите папку для резервирования:",
BIF_EDITBOX, NULL, NULL, 0 };
lpItemDlist = SHBrowseForFolder(&bi); // выводим диалоговое окно
SHGetPathFromIDList(lpItemDlist, szWorkDir); // получаем путь (szWorkDir)
Все OK, окно работает. Но как мне передать в него ту папку, на которой надо раскрыть дерево при старте окна?
В структуре BROWSEINFO есть член pidlRoot, который должен хранить путь к этой папке:
typedef struct _browseinfo {
HWND hwndOwner;
LPCITEMIDLIST pidlRoot;
LPTSTR pszDisplayName;
LPCTSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
Член pidlRoot является указателем на структуру ITEMIDLIST, член которой - экземпляр структуры SHITEMID. Как связать то, чем заполняется SHITEMID с путем к папке, я не понимаю.
Пожалуйста, объясните мне, как тут быть.
С уважением, Дмитрий
Вызываю окно выбора каталогов (то, в котором каталоги - в виде дерева и нет файлов):
LPITEMIDLIST lpItemDlist;
char szWorkDir[256]; // будет хранить возвращаемое значение
BROWSEINFO bi = { NULL, NULL, szWorkDir,
"Выберите папку для резервирования:",
BIF_EDITBOX, NULL, NULL, 0 };
lpItemDlist = SHBrowseForFolder(&bi); // выводим диалоговое окно
SHGetPathFromIDList(lpItemDlist, szWorkDir); // получаем путь (szWorkDir)
Все OK, окно работает. Но как мне передать в него ту папку, на которой надо раскрыть дерево при старте окна?
В структуре BROWSEINFO есть член pidlRoot, который должен хранить путь к этой папке:
typedef struct _browseinfo {
HWND hwndOwner;
LPCITEMIDLIST pidlRoot;
LPTSTR pszDisplayName;
LPCTSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
Член pidlRoot является указателем на структуру ITEMIDLIST, член которой - экземпляр структуры SHITEMID. Как связать то, чем заполняется SHITEMID с путем к папке, я не понимаю.
Пожалуйста, объясните мне, как тут быть.
С уважением, Дмитрий
bi.lpfn = BrowseCallbackProc;
bi.lParam = (LPARAM)szSelectedFolder;
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
LPCTSTR lpszFolder = (LPCTSTR)lpData;
switch(uMsg)
{
case BFFM_INITIALIZED:
{
// WParam is TRUE since you are passing a path.
// It would be FALSE if you were passing a pidl.
::SendMessage(hwnd, BFFM_SETSELECTION,TRUE,(LPARAM)pszFolder);
}
break;
}
}
а все-таки как???
Цитата:
Originally posted by Anton Chik
а все-таки как???
а все-таки как???
поторопился.уже разобрался.
еще посмотреть можно здесь