Load & Save диалоги
Вопрос собственно в том, какие функции нужно использовать, чтобы загрузить или сохранить файл в директории, выбранную вручную?
SHBrowseForFolder
SHBrowseForFolder
Я че-то около часа провозился
, так и не врубился как эта функция работает! ПОМОГИТЕ!
PS В MSDN лазил!
Я че-то около часа провозился
, так и не врубился как эта функция работает! ПОМОГИТЕ!
PS В MSDN лазил!
собственно меня интересует только вот какой вопрос (я в англ языке не силен, поэтому прошу помощи)
typedef struct _browseinfo {
HWND hwndOwner;
LPCITEMIDLIST pidlRoot; [COLOR=red]// что это[/COLOR]
LPTSTR pszDisplayName;[COLOR=red]// что это[/COLOR]
LPCTSTR lpszTitle;[COLOR=red]// что это[/COLOR]
UINT ulFlags;[COLOR=red]// что это[/COLOR]
BFFCALLBACK lpfn;[COLOR=red]// что это[/COLOR]
LPARAM lParam;
int iImage;[COLOR=red]// что это[/COLOR]
} BROWSEINFO
http://forum.codenet.ru/showthread.php?s=&threadid=24460&perpage=25&pagenumber=1
Тут я уже давал ответ как использовать данную функцию
Посмотри сюда:
http://forum.codenet.ru/showthread.php?s=&threadid=24460&perpage=25&pagenumber=1
Тут я уже давал ответ как использовать данную функцию
Может я чего не понимаю, но там не слова о данной функции....:D
// используется стандартный диалог сохранения
static char BASED_CODE szFilter[] = "AutoCAD R12/LT2 DXF (*.dxf)|*.dxf||";
CFileDialog dlg(FALSE,"dxf",strFileName,OFN_HIDEREADONLY | OFN_PATHMUSTEXIST |OFN_OVERWRITEPROMPT | OFN_ENABLESIZING,szFilter,NULL);
// делаем активным фильтр "AutoCAD R12/LT2 DXF"
dlg.m_ofn.nFilterIndex = 1;
// задаем начальную директорию
dlg.m_ofn.lpstrInitialDir = strDir;
// задаем заголовок диалогового окна
LoadString(hInstStr,IDS_TITLE_SAVE_EXPORT,(LPSTR)szBuff,DIMBUFF);
dlg.m_ofn.lpstrTitle = szBuff;
// показываем диалог
if(dlg.DoModal() == IDOK)
Пример кода
// используется стандартный диалог сохранения
static char BASED_CODE szFilter[] = "AutoCAD R12/LT2 DXF (*.dxf)|*.dxf||";
CFileDialog dlg(FALSE,"dxf",strFileName,OFN_HIDEREADONLY | OFN_PATHMUSTEXIST |OFN_OVERWRITEPROMPT | OFN_ENABLESIZING,szFilter,NULL);
// делаем активным фильтр "AutoCAD R12/LT2 DXF"
dlg.m_ofn.nFilterIndex = 1;
// задаем начальную директорию
dlg.m_ofn.lpstrInitialDir = strDir;
// задаем заголовок диалогового окна
LoadString(hInstStr,IDS_TITLE_SAVE_EXPORT,(LPSTR)szBuff,DIMBUFF);
dlg.m_ofn.lpstrTitle = szBuff;
// показываем диалог
if(dlg.DoModal() == IDOK)
Спасибо конечно, но это [COLOR=red]MFC[/COLOR], а хотелось бы WinAPI!
Спасибо конечно, но это [COLOR=red]MFC[/COLOR], а хотелось бы WinAPI!
Пишешь обработчик нажатия на кнопку:
procedure TForm1.Button1Click(Sender: TObject);
type
s = string[40];
var
Dialog: BROWSEINFO; //переменная, в которой хранятся все параметры диалога
Folder: ^s; //переменная, в которую возвращается незвание выбранной папка
begin
New(Folder);
//задаем параметры диалога
Dialog.hwndOwner:= Handle;
Dialog.pidlRoot:= nil; //начальная дирнктория(если nil, то рабочий стол)
Dialog.pszDisplayName:= PChar(Folder); //переменная, в которую возвращается незвание выбранной папка
Dialog.lpszTitle:= 'Выберите папку'; //текст, отображаемый в диалоге
Dialog.ulFlags:= 0; //параметры диалога(если 0, то стандартный диалог)
Dialog.lpfn:= nil; //адрес ф-ии, которая выполняется после выбора папки(в нашем случае она отсутствует)
Dialog.lParam:= 0; //параметры, передаваемые предыдущей ф-ии, если она определена
Dialog.iImage:= 0; //в эту переменную возвращается индекс иконки выбранной папки
SHBrowseForFolder(Dialog); //показываем диалог
SetWindowText(Handle, PChar(Folder)); //показываем название выбранной папки
Dispose(Folder);
end;
Пишешь обработчик нажатия на кнопку:
procedure TForm1.Button1Click(Sender: TObject);
type
s = string[40];
var
Dialog: BROWSEINFO; //переменная, в которой хранятся все параметры диалога
Folder: ^s; //переменная, в которую возвращается незвание выбранной папка
begin
New(Folder);
//задаем параметры диалога
Dialog.hwndOwner:= Handle;
Dialog.pidlRoot:= nil; //начальная дирнктория(если nil, то рабочий стол)
Dialog.pszDisplayName:= PChar(Folder); //переменная, в которую возвращается незвание выбранной папка
Dialog.lpszTitle:= 'Выберите папку'; //текст, отображаемый в диалоге
Dialog.ulFlags:= 0; //параметры диалога(если 0, то стандартный диалог)
Dialog.lpfn:= nil; //адрес ф-ии, которая выполняется после выбора папки(в нашем случае она отсутствует)
Dialog.lParam:= 0; //параметры, передаваемые предыдущей ф-ии, если она определена
Dialog.iImage:= 0; //в эту переменную возвращается индекс иконки выбранной папки
SHBrowseForFolder(Dialog); //показываем диалог
SetWindowText(Handle, PChar(Folder)); //показываем название выбранной папки
Dispose(Folder);
end;
О! ТО ЧТО НАДО! Спасибо!
О! ТО ЧТО НАДО! Спасибо!
Продолжаем поднятую мною тему!
Как мне теперь загрузить определенный файл?
Вот мой код. Для диалога открытия
{
BOOL fRet;
TCHAR szPath[MAX_PATH];
LPITEMIDLIST pidl;
LPITEMIDLIST pidlRoot;
LPMALLOC lpMalloc;
BROWSEINFO bi = {
NULL, NULL,
szPath, "Выберите папку",
BIF_RETURNONLYFSDIRS,
NULL, 0, 0
};
if (0 != SHGetSpecialFolderLocation(HWND_DESKTOP, CSIDL_DRIVES, &pidlRoot))
return FALSE;
if (NULL == pidlRoot)
return FALSE;
bi.pidlRoot = pidlRoot;
pidl = SHBrowseForFolder(&bi);
if (NULL != pidl)
fRet = SHGetPathFromIDList(pidl, szDir);
else
fRet = FALSE;
if (!SHGetMalloc(&lpMalloc) && (NULL != lpMalloc))
{
if (NULL != pidlRoot)
{
lpMalloc->Free(pidlRoot);
}
if (NULL != pidl)
{
lpMalloc->Free(pidl);
}
lpMalloc->Release();
}
return fRet;
}
LPTSTR PAlloc(int cch)
{
return (LPTSTR) LocalAlloc(LMEM_FIXED, sizeof(TCHAR) * (cch+1));
}
BOOL PDeAlloc(HLOCAL mem_ptr)
{
return (LocalFree(mem_ptr)==NULL) ? true : false;
}
Для загрузки файла
{
hbitmap = (HBITMAP)LoadImage(hInst,"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if (!hbitmap)
MessageBox(hWnd, "Alarm! (: File not found", "Error", MB_ICONERROR|MB_OK);
else
{
GetObject(hbitmap, sizeof(BITMAP), &bmp);
hWidth = bmp.bmWidth;
hHeight = bmp.bmHeight;
HDC hdc = GetDC(hWnd);
image_dc = CreateCompatibleDC(hdc);
HBITMAP old_hbitmap = (HBITMAP)SelectObject(image_dc,hbitmap);
}
}
И собственно сборка файла
LPTSTR fname;
fname=PAlloc(250);
FGetDirectory(fname);
LoadBMTrue(hWnd, fname, bitmap);
PDeAlloc((HLOCAL)fname);
break;
Вопрос! Чего мне не хватает, чтобы выбрать определенный файл?
За информацией обращяйся к той же ссылке,там данная функция была точно освещена.