#include <shlobj.h>
/* .... */
bool ChooseFolder(HWND hwnd, LPSTR lpszTitle, LPSTR lpBuffer) {
BROWSEINFO bi;
bool res = false;
LPITEMIDLIST pidlBrowse;
ZeroMemory(&bi, sizeof(BROWSEINFO));
bi.hwndOwner = hwnd;
bi.pszDisplayName = lpBuffer;
bi.lpszTitle = lpszTitle;
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_DONTGOBELOWDOMAIN;
pidlBrowse = SHBrowseForFolder(&bi);
if (pidlBrowse != NULL) {
if (SHGetPathFromIDList(pidlBrowse, lpBuffer))
res = true;
}
return res;
}
[C++]Диалог выбора директории. Как установить начальную директорию?
Код:
Т.е. чтобы при открытии диалога был выделен каталог из lpBuffer
код взят из WIN32SDK
Насколько я понимаю, надо копать в сторону BROWSEINFO::lpfn
Цитата: max_dark
Насколько я понимаю, надо копать в сторону BROWSEINFO::lpfn
Разве? а не просто SetCurrentDir(dir)?
Цитата:
Разве? а не просто SetCurrentDir(dir)?
SetCurentDir - установка рабочего каталога программы.
А мне нужно ВЫДЕЛЕНИЕ КАТАЛОГА в диалоге
Например:
Код:
char buff[MAX_PATH];
lstrcpy(buff,"D:\\docs\\sources\\Visual C++");
ChooseFolder(hwnd,"Microsoft Visual C++ 6.0",buff);
lstrcpy(buff,"D:\\docs\\sources\\Visual C++");
ChooseFolder(hwnd,"Microsoft Visual C++ 6.0",buff);
Должен сразу выделять каталог Visual C++
Как на скриншоте
Код:
#include <shlobj.h>
/* .... */
int __stdcall BrowseCallbackProc(
HWND hwnd,
UINT uMsg,
LPARAM lParam,
LPARAM lpData
) {
switch (uMsg) {
case BFFM_INITIALIZED: {
// При инициализации диалога
// посылаем сообщение установки каталога
if(lpData!=NULL)
SendMessage(hwnd,BFFM_SETSELECTION,TRUE,lpData);
} break;
case BFFM_SELCHANGED : {
} break;
}
return 0;
}
bool ChooseFolder(HWND hwnd, LPSTR lpszTitle, LPSTR lpBuffer) {
BROWSEINFO bi;
bool res = false;
LPITEMIDLIST pidlBrowse;
ZeroMemory(&bi, sizeof(BROWSEINFO));
bi.hwndOwner = hwnd;
bi.pszDisplayName = lpBuffer;
bi.lpszTitle = lpszTitle;
bi.lParam=(LPARAM)lpBuffer;
bi.lpfn=BrowseCallbackProc;
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_DONTGOBELOWDOMAIN;
pidlBrowse = SHBrowseForFolder(&bi);
if (pidlBrowse != NULL) {
if (SHGetPathFromIDList(pidlBrowse, lpBuffer))
res = true;
}
return res;
}
/* .... */
int __stdcall BrowseCallbackProc(
HWND hwnd,
UINT uMsg,
LPARAM lParam,
LPARAM lpData
) {
switch (uMsg) {
case BFFM_INITIALIZED: {
// При инициализации диалога
// посылаем сообщение установки каталога
if(lpData!=NULL)
SendMessage(hwnd,BFFM_SETSELECTION,TRUE,lpData);
} break;
case BFFM_SELCHANGED : {
} break;
}
return 0;
}
bool ChooseFolder(HWND hwnd, LPSTR lpszTitle, LPSTR lpBuffer) {
BROWSEINFO bi;
bool res = false;
LPITEMIDLIST pidlBrowse;
ZeroMemory(&bi, sizeof(BROWSEINFO));
bi.hwndOwner = hwnd;
bi.pszDisplayName = lpBuffer;
bi.lpszTitle = lpszTitle;
bi.lParam=(LPARAM)lpBuffer;
bi.lpfn=BrowseCallbackProc;
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_DONTGOBELOWDOMAIN;
pidlBrowse = SHBrowseForFolder(&bi);
if (pidlBrowse != NULL) {
if (SHGetPathFromIDList(pidlBrowse, lpBuffer))
res = true;
}
return res;
}