Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.18;
Скачать: CL | DM;

Вниз

Использование 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;
 Options: TSelectDirOpts; HelpCtx: Longint): Boolean;
из FileCtrl .


 
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 вся ветка

Текущий архив: 2007.02.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
3-1164621424
moybobr
2006-11-27 12:57
2007.02.18
Параметры в ADO


15-1169595782
SkySpeed
2007-01-24 02:43
2007.02.18
Хочу в качестве проводника сделать Total Commander


2-1170323414
oleg_veles
2007-02-01 12:50
2007.02.18
Ошибка при построении запроса


15-1169830589
oldman
2007-01-26 19:56
2007.02.18
Почему компьютер так говорит?


1-1166770324
TCrash
2006-12-22 09:52
2007.02.18
ScreenShot