Стандартные диалоговые панели для открытия файлов
В составе операционной системы Windows версии 3.1 имеется DLL-библиотека commdlg.dll, экспортирующая среди прочих две функции, очень удобные для организации пользовательского интерфейса при открытии файлов. Это функции GetOpenFileName и GetSaveFileName . Мы уже пользовались этими функциями в приложениях OEM2ANSI и OEM3ANSI.
Функция GetOpenFileName выводит на экран стандартную или измененную приложением диалоговую панель "Open", позволяющую выбрать файл (рис. 4.1).
Рис. 4.1. Диалоговая панель "Open"
Функция GetSaveFileName выводит стандартную или измененную приложением диалоговую панель "Save As..." (рис. 4.2).
Рис. 4.2. Диалоговая панель "Save As..."
Внешний вид этих диалоговых панелей определяется структурой типа OPENFILENAME , определенной в файле commdlg.h (этот файл находится в каталоге include системы разработки Borland C++ или Microsoft Visual C++):
typedef struct tagOFN { DWORD lStructSize; HWND hwndOwner; HINSTANCE hInstance; LPCSTR lpstrFilter; LPSTR lpstrCustomFilter; DWORD nMaxCustFilter; DWORD nFilterIndex; LPSTR lpstrFile; DWORD nMaxFile; LPSTR lpstrFileTitle; DWORD nMaxFileTitle; LPCSTR lpstrInitialDir; LPCSTR lpstrTitle; DWORD Flags; UINT nFileOffset; UINT nFileExtension; LPCSTR lpstrDefExt; LPARAM lCustData; UINT (CALLBACK *lpfnHook)(HWND, UINT, WPARAM, LPARAM); LPCSTR lpTemplateName; } OPENFILENAME;
Адрес структуры передается функциям GetOpenFileName и GetSaveFileName в качестве параметра lpofn:
BOOL WINAPI GetOpenFileName(OPENFILENAME FAR* lpofn); BOOL WINAPI GetSaveFileName(OPENFILENAME FAR* lpofn);
Обе функции возвращают ненулевое значение, если пользователь сделал выбор файла, и ноль, если он отказался от выбора, нажав кнопку "Cancel" или выбрав строку "Close" из системного меню диалоговой панели. Нулевое значение возвращается также при возникновении ошибки.
В результате выбора некоторые поля структуры будут заполнены информацией о выбранном файле.
Опишем назначение отдельных полей структуры OPENFILENAME.