Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба8.doc
Скачиваний:
2
Добавлен:
12.11.2019
Размер:
982.02 Кб
Скачать

18

Министерство образования и науки Российской Федерации

Казанский государственный технический университет

имени А.Н. Туполева

____________________________________________

Межкафедральный филиал факультета № 4 в ОАО ICL-КПО ВС

Р.Ф. Миннибаев

Методическое руководство к

лабораторной работе

“ Работа со стандартными диалогами (Common Dialogs),

чтение - запись файлов.”

по дисциплине “Системное программирование”

КАЗАНЬ 2004

СОДЕРЖАНИЕ

1. Стандартные диалоги 3

1.2. Работа с Common Dialogs 3

1.3. Стандартные диалоги открытия - сохранения файлов 4

1.3.1. Инициализация структуры перед вызовом диалога открытия или сохранения файла 6

1.3.2. Вызов диалога открытия файла 6

1.3.3. Вызов диалога сохранения файла 7

1.4. Стандартный диалог выбора цвета 7

1.4.1. Инициализация структуры перед вызовом диалога выбора цвета 8

2. Операции с файлами. Создание, открытие файлов. Запись - чтение данных из файлов. 8

2.1. Создание - открытие файла 9

2.2. Чтение из файла 11

2.3. Запись в файл 11

2.4. Перемещение указателя файла 12

3. Порядок выполнения работы 13

4. Контрольные вопросы 13

Приложение 14

1. Стандартные диалоги

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

1.2. Работа с Common Dialogs

Порядок работы с Common Dialogs можно описать в виде следующей последовательности шагов:

  1. Объявление переменной типа структуры, соответствующей стандартному диалогу

Пример:

CHOOSECOLOR cl; // для выбора цвета

OPENFILENAME op; // для открытия - сохранения файла

  1. Заполнение полей вышеуказанной переменной в соответствии с тем, какое окно стандартного диалога необходимо получить (задаются такие параметры, как заголовок диалога, маска для файлов для диалогов открытия - сохранения файлов, и т.п.), также выделяется память под некоторые из полей, в которых будет возвращен результат.

  2. Вызов API - функции, соответствующей стандартному диалогу, который необходимо вызвать, где в качестве параметра передается указатель на вышеуказанную переменную, представляющую собой структуру с заполненными полями.

Пример:

GetOpenFileName(&ofn); // вызов диалога открытия файла

GetSaveFileName(&ofn); // вызов диалога сохранения файла

ChooseColor(&cc); // вызов диалога выбора цвета

  1. Результат работы стандартного диалога возвращается в одном из полей вышеуказанной переменной

Разберем подробнее работу с некоторыми видами стандартных диалогов

1.3. Стандартные диалоги открытия - сохранения файлов

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

Пример объявления:

OPENFILENAME ofn;

Структура OPENFILENAME:

typedef struct tagOFN { // ofn

DWORD lStructSize;

HWND hwndOwner;

HINSTANCE hInstance;

LPCTSTR lpstrFilter;

LPTSTR lpstrCustomFilter;

DWORD nMaxCustFilter;

DWORD nFilterIndex;

LPTSTR lpstrFile;

DWORD nMaxFile;

LPTSTR lpstrFileTitle;

DWORD nMaxFileTitle;

LPCTSTR lpstrInitialDir;

LPCTSTR lpstrTitle;

DWORD Flags;

WORD nFileOffset;

WORD nFileExtension;

LPCTSTR lpstrDefExt;

DWORD lCustData;

LPOFNHOOKPROC lpfnHook;

LPCTSTR lpTemplateName;

} OPENFILENAME;

Рассмотрим некоторые из наиболее важных полей этой структуры.

lStructSize - размер структуры в байтах

hwndOwner - определяет окно, которое является хозяином диалога, NULL - если не имеет хозяина

lpstrFilter - фильтр, содержащий пары строк, символом конца строки последняя строка в буфере должна заканчиваться двумя символами конца строки первая строка в каждой паре должна содержать описание фильтра вторая содержит шаблон, если NULL то никаких фильтров не отображается (*.*, *.txt)

lpstrCustomFilter - указывает на буфер, содержащий пару строк, оканчивающихся нулевым символом для фильтра, определенного пользователем

nMaxCustFilter - определяет размер буфера под пользовательский фильтр, определяемый lpstrCustomFilter этот буфер должен быть как минимум размером 40 байт, это значение не учитывается если lpstrCustomFilter равен NULL

nFilterIndex - определяет индекс текущего выбранного фильтра

lpstrFile - указатель на буфер, который содержит название файла

lpstrFileTitle - указатель на буфер для хранения названия файла и расширения (не содержит путь)

nMaxFileTitle - размер в байтах или символах буфера, на который указывает lpstrFileTitle

lpstrInitialDir - указывает на начальную директорию, если NULL то в качестве начальной директории берется текущая

lpstrTitle - указывает на название диалога, если NULL, то используется название по умолчанию ("Сохранение", "Открытие файла")

Flags - набор битовых флагов для инициализации диалога

некоторые из флагов

OFN_ALLOWMULTISELECT - разрешает выбор нескольких файлов, тогда в качестве результата lpstrFile содержит директорию, далее следуют имена файлов (директория и имена файлов разделяются нулевыми символами)

OFN_CREATEPROMPT - если пользователь открывает файл, которого не существует, то вызывается диалог, где у пользователя спрашивается разрешение на создание нового файла

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

OFN_HIDEREADONLY - прячет галочку "Только для чтения"

OFN_NOCHANGEDIR - возвращает текущую директорию к начальному значению, если пользователь изменил ее значение, осуществляя поиск файла

OFN_NONETWORKBUTTON - прячет кнопку "Сеть"

OFN_OVERWRITEPROMPT - заставляет диалог "Сохранить как " выдавать предупреждение, если такой файл уже существует

OFN_PATHMUSTEXIST - указывает на то, что пользователь может печатать только существующие пути и файлы, в противном случае выдается предупреждение

OFN_READONLY - определяет то, что галочка "Только чтение" помечена при запуске диалога

OFN_SHAREAWARE - игнорирует ошибку на нарушение доступа по сети

OFN_SHOWHELP - показывает кнопку "Помощь"

nFileOffset - определяет смещение (отсчет от нуля) до имени файла в строке, содержащей полный путь и имя файла

nFileExtension - определяет смещение (отсчет от нуля) до расширения файла в строке, содержащей полный путь и имя файла

lpstrDefExt - указывает на буфер, содержащий расширение по умолчанию

lCustData - данные которые передаются в процедуру - ловушку (hook)

lpfnHook - указатель на процедуру - ловушку

lpTemplateName - указатель на строку, название ресурса - диалога

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]