Форум: "WinAPI";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
ВнизИспользование SHBrowseForFolder. Найти похожие ветки
← →
novice_man © (2006-10-09 14:09) [0]Каким образом "заставить" открываться окно выбора каталога так, что бы текущим был указан каталог, который нужен мне.
← →
clickmaker © (2006-10-09 16:10) [1]есть пример на си. Переводить лень
int CALLBACK
BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch(uMsg)
{
case BFFM_INITIALIZED:
{
CenterDialog(hwnd);
SendMessage( hwnd, BFFM_SETSELECTION, 0, lpData );
break;
}
case BFFM_SELCHANGED:
{
CHAR szPath[MAX_PATH];
BOOL bEnableOk = SHGetPathFromIDList((LPITEMIDLIST)(lParam), szPath);
SendMessage( hwnd, BFFM_ENABLEOK, 0, (LPARAM)(bEnableOk));
break;
}
}
return 0;
}
BOOL BrowseForFolder(HWND hwnd, LPSTR lpszDir, int nRootFolder)
{
BROWSEINFO bi;
WCHAR wszPath[MAX_PATH];
IMalloc* Malloc;
IShellFolder* Desktop;
ULONG CharsDone;
DWORD dwAttributes;
LPITEMIDLIST pidlRoot, pidlInitialFolder;
CHAR szTemp[MAX_PATH];
BOOL bRetVal = FALSE;
if ( SUCCEEDED( SHGetMalloc( &Malloc ) ) )
{
if ( SUCCEEDED( SHGetDesktopFolder( &Desktop ) ) )
{
if ( SUCCEEDED( SHGetSpecialFolderLocation( 0, nRootFolder, &pidlRoot ) ) )
{
MultiByteToWideChar(CP_ACP, 0, lpszDir, -1, wszPath, MAX_PATH);
if (!SUCCEEDED( Desktop->ParseDisplayName( 0, NULL, wszPath, &CharsDone,
&pidlInitialFolder, &dwAttributes ) ) )
{
GetCurrentDirectory(MAX_PATH, szTemp);
MultiByteToWideChar(CP_ACP, 0, szTemp, -1, wszPath, MAX_PATH);
Desktop->ParseDisplayName( 0, NULL, wszPath, &CharsDone,
&pidlInitialFolder, &dwAttributes );
}
if (pidlInitialFolder)
{
ZeroMemory(&bi, sizeof(BROWSEINFO));
bi.hwndOwner = hwnd;
bi.lpszTitle = GetResourceStr(IDS_SELECT_FOLDER);
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
bi.lpfn = BrowseCallbackProc;
bi.lParam = (LONG)(pidlInitialFolder);
LPITEMIDLIST pidlResult = SHBrowseForFolder( &bi );
if (pidlResult)
{
if (SHGetPathFromIDList( pidlResult, szTemp ) )
{
lstrcpy(lpszDir, szTemp);
bRetVal = TRUE;
}
Malloc->Free( pidlResult );
}
Malloc->Free( pidlInitialFolder );
}
Malloc->Free ( pidlRoot );
}
Desktop->Release();
}
Malloc->Release();
}
return bRetVal;
}
← →
guav © (2006-10-09 16:16) [2]Есть пример на Delphi. см
function SelectDirectory(var Directory: string;
из FileCtrl .
Options: TSelectDirOpts; HelpCtx: Longint): Boolean;
← →
novice_man © (2006-10-09 16:52) [3]guav © (09.10.06 16:16) [2]
Ок, попробую завтра на работе.
← →
keymaster © (2006-10-09 17:53) [4]procedure TForm1.Button1Click(Sender: TObject);
var
Dir : String;
begin
Dir := "c:\temp";
SelectDirectory("Select Directory", "", Dir);
end;
← →
novice_man © (2006-10-10 08:45) [5]
> keymaster © (09.10.06 17:53) [4]
Читаем тему, вопрос? Или чукча не читатель, чукча писатель.
(Ничего личного, бизнес)
> guav © (09.10.06 16:16) [2]
Ок, разобрался, все получилось.
Спасибо большое за наводку.
(Как только сам не додумался посмотреть код в FileCtrl)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.048 c