typedef struct _BROWSEINFO
{
long hwndOwner;
char* pidlRoot;
char* pszDisplayName;
char* lpszTitle;
long ulFlags;
long lpfn;
long lParam;
int iImage;
}BROWSEINFO;
DWORD WINAPI SHBrowseForFolder(DWORD);
DWORD WINAPI SHGetPathFromIDList(long,long);
API(SHBrowseForFolder,shell32)
API(SHGetPathFromIDList,shell32)
#define PRAGMA_API SHBrowseForFolder;shell32!SHBrowseForFolderA
#define PRAGMA_API SHGetPathFromIDList;shell32!SHGetPathFromIDListA
#define BIF_RETURNONLYFSDIRS 0x00000001
#define BIF_DONTGOBELOWDOMAIN 0x00000002
#define BIF_STATUSTEXT 0x00000004
#define BIF_RETURNFSANCESTORS 0x00000008
#define BIF_EDITBOX 0x00000010
#define BIF_VALIDATE 0x00000020
#define BIF_NEWDIALOGSTYLE 0x00000040
#define BIF_BROWSEINCLUDEURLS 0x00000080
#define BIF_UAHINT 0x00000100
#define BIF_NONEWFOLDERBUTTON 0x00000200
#define BIF_NOTRANSLATETARGETS 0x00000400
#define BIF_BROWSEFORCOMPUTER 0x00001000
#define BIF_BROWSEFORPRINTER 0x00002000
#define BIF_BROWSEINCLUDEFILES 0x00004000
#define BIF_SHAREABLE 0x00008000
#define BIF_BROWSEFILEJUNCTIONS 0x00010000
function folder_dialog(STRING* dir)
{
STRING* DirName = str_create("#255"); *DirName.chars=0;
BROWSEINFO FOdlg; memset(FOdlg, 0, sizeof(BROWSEINFO));
FOdlg.pszDisplayName = DirName.chars;
FOdlg.ulFlags = NULL;
long lpItem = SHBrowseForFolder(&FOdlg);
if(lpItem==0)
{
str_remove(DirName);
return(0);
}
else
{
SHGetPathFromIDList(lpItem, DirName.chars);
str_cpy(dir, DirName);
str_remove(DirName);
return(1);
}
}