Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Диалог выбора пути


Автор: Fixin 13.1.2005, 23:16
Как вызвать стандартный диалог выбора пути к папке. Ведь есть же такой, видел. Может спец стиль в GetOpenFileName(OPENFILENAME)? Или еще что?

Автор: Laco 14.1.2005, 00:27
Копай в сторону SHBrowseForFolder

Автор: Peter 17.1.2005, 11:17
Такое я делал. Помню, что надо использовать две функции одну за другой.
Вот что: некто Михаил Евтеев сделал программу Cutter и выставил ее на всеобщее пользование вместе с исходниками. Поищи! Именно оттуда я код и сдирал.

Автор: Adil' 17.1.2005, 15:57
Код
#include <shlobj.h>

//возвращает FALSE при ошибке и TRUE при удаче
BOOL OpenFolder(LPSTR szFolder, //адрес, куда положить
     HWND hwndOwner=NULL, //родительское окно для диалога
     int nFolder=-1) //если -1 - то вызов стандартного диалога выбора папки
                     //иначе CSIDL_... (специальная папка, see SHGetSpecialFolderLocation) -возвращает путь
                     //к спецпапке Виндовс
{
 *szFolder=0;
 LPMALLOC IMalloc;
 if(SHGetMalloc(&IMalloc)==E_FAIL)
   return FALSE;
 ITEMIDLIST *piidl=NULL;
 BOOL ret=FALSE;
 if(nFolder==-1)
 {
   BROWSEINFO bi;
   bi.hwndOwner=hwndOwner;
   bi.pidlRoot=NULL;
   bi.pszDisplayName=szFolder;
   bi.lpszTitle="Open Folder for Shortcut:";
   bi.ulFlags=BIF_DONTGOBELOWDOMAIN;
   bi.lpfn=NULL;  
   bi.lParam=0;  
   bi.iImage=0;  
   piidl=SHBrowseForFolder(&bi);
   if(piidl!=NULL)
     ret=SHGetPathFromIDList(piidl, szFolder);
 }
 else
 {
   ret=(SHGetSpecialFolderLocation(hwndOwner, nFolder, &piidl)==NOERROR);
   if(ret)
     ret=SHGetPathFromIDList(piidl, szFolder);
 }
 if(piidl)
   IMalloc->Free(piidl);
 IMalloc->Release();
 return ret;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)