Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций Часть II.doc
Скачиваний:
13
Добавлен:
20.11.2018
Размер:
1.48 Mб
Скачать

П. 5.5. Стандартные диалоговые панели

5.5.1. Панели для открытия или сохранения файлов

В Win32 API существуют две функции для организации пользова­тельского интерфейса при выборе имен для открытия или создания файлов и при выборе имени для сохранения файла Это функции Ge-tOpenFileName и GetSaveFileName.

Функция GetOpenFileName создает стандартную панель выбора имен для открытия или создания файлов. Эта панель обеспечивает просмотр дисков, каталогов и списка имен файлов и выбор одного или нескольких имен файлов из списка.

Функция GetOpenFileName объявлена следующим образом: BOOL GetOpenFileName( LPOPENFILENAME Ipofn);

Параметр lpofii указывает на структуру типа OPENFILENAME, кото­рая содержит данные для инициализации панели. После завершения ра­боты функции GetOpenFileName этд структура будет дополнена данны­ми о выбранных именах файлов.

Если пользователь выбрал имя файла и нажал кнопку ОК, возвра­щаемое значение отлично от нуля. При этом буфер, указанный полем ipstrFile структуры будет содержать полное имя выбранного файла. Ина­че возвращаемое значение - нуль.

Функция GetSaveFileName создает стандартную панель выбора имени для сохранения файла/Эта панель обеспечивает просмотр дисков, ката­логов и списка имен файлов и выбор одного имени файла. Эта функция объявлена следующим образом: BOOL GetSaveF9eNatne( LPOPENRLENAME Ipofn};

Параметр lpofh указывает на структуру типа OPENFILENAME, кото­рая содержит данные для инициализации панели. После завершения ра­боты функции GetSaveFileName эта структура будет дополнена данными ов

Если пользователь выбрал имя файла и нажал кнопку ОК, возвра­щаемое значение отлично от нуля. При этом буфер, указанный полем ipstrFile структуры, будет содержать полное имя выбранного файла. Иначе возвращаемое значение - нуль.

Структура OPENFILENAME описала следующим образом:

typedefstojet

IStructSize;

hwndOwner,

hlnstance;

IpstrFfflen

IpstfCustomFilto",

nMaxCustFffler;

nFiltertndex;

DWORD

HWND

H1NSTANCE

LPCTSTR

LPTSTK

DWORD

DWORD

LPTSTR

DWORD

LPTSTR

DWORD

LPCTSTR

LPCTSTR

DWORD

WORD

WORD

LPCTSTR

DWORD

LPOFNHOOKPROC

LPCTSTR

OPENFILENAME;

nMaxFile;

nMaxFileTitte;

tpstrinitialDtn

IpstrTitle;

nFfteOtfeet;

nFiteExtenston;

ipstfOefExt;

ICustData;

ipfaHook;

IpTemplateName;

Назначение полей структуры OPENFILENAME: .

1. IStructSize содержит размер структуры OPENFILENAME в байтах.

2. hwndOwner - дескриптор окна - владельца панели.

3. hlnstance указывает на блок памяти с шаблоном панели. Это поле игнорируется, если не указан флаг OFN^ENABLETEMPLATE или OFN_ ENABLETEMPLATEHANDLE.

Если Flags содержит значение OFN_EXPLORER, используется пре­допределенный шаблон панели в стиле Explorer. Иначе создается панель старого стиля.

4. ipstrFilter содержит адрес текстовой строки, задающей фильтр имен файлов. Фильтр состоит из одной или нескольких пар текстовых строк. Например, "Текстовые файлы\0*Ш\0". Символ \0? означает конец стро­ки. Первая строка пары (здесь "Текстовые файлы") поясняет назначение фильтра, а вторая (здесь "*.txt") задает образец имен файлов. В одной па­ре можно задать различные образцы, разделяя их точкой с запятой (на­пример, "*.txt; *.doc; *.bak"). Если lpstrFilter=NULL, используется фильтр lpstrCustomFilter.

5. lpstrCustomFilter указывает на статический буфер, в котором будет храниться примененный пользователем фильтр. Этот буфер должен быть длиной не менее 40 символов.

6. nMaxCustFilter содержит размер буфера lpstrCustomFilter.

7. nFilterlndex задает номер пары строк в поле IpstrFilter для использо­вания в качестве фильтра. После выбора имени файла в поле nFilterlndex сохраняется номер использованного фильтра.

8. IpstrFile содержит адрес строки, в которую будет записано полное имя выбранного файла. Если выбран список имен файлов, эта строка будет содержать путь, завершенный символом '\0', затем следуют имена файлов, завершенные символом *\0\ Последнее в списке имя завершается двумя символами \0\

9. nMaxFile содержит размер в байтах буфера, расположенного по ад­ресу, указанному в поле IpstrFile.

10. ipstrFileTitle содержит адрес буфера, в который после выбора будет записано имя файла без указания пути. Это поле может быть исполь­зовано для отображения имени выбранного файла.

11. nMaxFileTitle содержит размер указанного выше буфера. Этот член игнорируется, если lpstrFileTitle=NULL.

12. ipstrlnitialDir указывает на строку, содержащую начальный путь по­иска имен файлов.

13.1pstrTit.e указывает на строку, содержащую нестандартный заголовок панели.

14. nFileOffset будет содержать, смещение первого символа имени файла от начала буфера lpsfrFile. Например, если IpstrFile указывает на строку "c:\did\dir2\lle.exfV то поле nFileOffset содержит смещение имени file.ext от начала строки, равное 13.

15. nFileExtension будет содержать смещение первого символа расшире­ния имени файла от начала буфера lpstrFile. Например, если IpstrFile указывает на строку «c:\dirl\dir2\fue.ext», то это поле содержит сме­щение расширения ext от начала строки, равное 18.

16. ipstrDefExt указывает на буфер,, который содержит Расширение име­ни файла по умолчанию. Это расширение добавляется к выбранному имени файла, если расширение не было указано.

17. Значение lCustData передается функции фильтра через параметр lParam.

18 Flags задает режимы выбора и внешний вид панели. Следующая таблица содержит список часто применяемых флагов, комбинации которых используются для заполнения этого поля:

Флаг

OFN ALLOWMULTI'SELECT

Можно выбрать список имен файлов

OFN_CREATEPROMPT

При выборе имени не существующе­го файла панель запросит, нужно ли создать файл

OFN_ENABLEHOOK

Использовать функцию фильтра, ука­занную в поле lpfhHook

OFNJEXPLORER

Этот флаг указывают только с флагом OFN ENABLEHOOKmh OFN ALLOWMULTISELECT

OFN EXTENSIONDIFFERENT

Проверить ситуации, когда расшире­ние заданного имени файла отличается от расширения, указанного в lpstrDefExt

OFN_FILEMUSTEXIST

Предупреждать при вводе имени не­существующего файла. Используется с флагом OFN_PATHMUSTEXIST

OFN HIDEREADONLY

Скрыть кнопку "Только чтение"

OFN_N0CHANGEDIR

Поиск файлов начинать в первона­чально заданном каталоге

OFN_NONETWORKBUTTON

Скрыть и отключить кнопку Network

OFN NOREADONLYRETURN

Запретить выбор файла с атрибутом "только чтение" и в защищенном от записи каталоге

OFN_OVERWRITEPROMPT

При сохранении файла предупреж­дать, если файл с указанным именем уже существует

OFNJ»ATHMUSTEXIST

Можно вводить только существую­щее полное имя файла

OFN READONLY

Включить кнопку "Только чтение"

OFN_SHAREAWARE

Игнорировать факт совместного дос­тупа к файлу по сети

OFN SHOWHELP

Показать кнопку "Справка"

19. ipfhHook указывает на функцию фильтра, обрабатывающую сообще­ния для панели.

20. lpTemplatename идентифицирует ресурс, содержащий шаблон пане­ли, используемый вместо стандартного шаблона. Для применения альтернативного шаблона в поле Flags следует установить флагОРЫ_ ENABLETEMPLATE.

Задача. Главное меню приложения содержит раздел "Файл" со строками "Открыть", "Сохранить" и "Выход". При выборе строки "Открыть" создать стандартную панель для выбора списка имен для открытий или создания файлов. Отобразить этот список. При выборе строки "Сохра­нить" создать стандартную панель для выбора имени для сохранения файла. Отобразить это имя. Панели должны работать с одними и теми же допустимыми начальными установками.