- •Министерство образования и науки Российской Федерации
- •1. Стандартные диалоги
- •1.2. Работа с Common Dialogs
- •1.3. Стандартные диалоги открытия - сохранения файлов
- •1.3.1. Инициализация структуры перед вызовом диалога открытия или сохранения файла
- •1.3.2. Вызов диалога открытия файла
- •1.3.3. Вызов диалога сохранения файла
- •1.4. Стандартный диалог выбора цвета
- •1.4.1. Инициализация структуры перед вызовом диалога выбора цвета
- •2. Операции с файлами. Создание, открытие файлов. Запись - чтение данных из файлов.
- •2.1. Создание - открытие файла
- •2.2. Чтение из файла
- •2.3. Запись в файл
- •2.4. Перемещение указателя файла
- •3. Порядок выполнения работы
- •4. Контрольные вопросы
- •Приложение Файл cmdlg.Cpp
- •Файл cmdlg.Rc
- •Файл resource.H
Министерство образования и науки Российской Федерации
Казанский государственный технический университет
имени А.Н. Туполева
____________________________________________
Межкафедральный филиал факультета № 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 можно описать в виде следующей последовательности шагов:
Объявление переменной типа структуры, соответствующей стандартному диалогу
Пример:
CHOOSECOLOR cl; // для выбора цвета
OPENFILENAME op; // для открытия - сохранения файла
Заполнение полей вышеуказанной переменной в соответствии с тем, какое окно стандартного диалога необходимо получить (задаются такие параметры, как заголовок диалога, маска для файлов для диалогов открытия - сохранения файлов, и т.п.), также выделяется память под некоторые из полей, в которых будет возвращен результат.
Вызов API - функции, соответствующей стандартному диалогу, который необходимо вызвать, где в качестве параметра передается указатель на вышеуказанную переменную, представляющую собой структуру с заполненными полями.
Пример:
GetOpenFileName(&ofn); // вызов диалога открытия файла
…
GetSaveFileName(&ofn); // вызов диалога сохранения файла
…
ChooseColor(&cc); // вызов диалога выбора цвета
Результат работы стандартного диалога возвращается в одном из полей вышеуказанной переменной
Разберем подробнее работу с некоторыми видами стандартных диалогов
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 - указатель на строку, название ресурса - диалога