- •Министерство образования и науки Российской Федерации
- •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
1.3.1. Инициализация структуры перед вызовом диалога открытия или сохранения файла
Перед тем как вызывать диалог соответствующей ему API - функцией необходимо инициализировать поля переменной, которая будет определять вид и поведение диалога. Для диалога открытия - сохранения файла обязательными для заполнения полями являются поле lStructSize - размер структуры, поле lpstrFile - необходимо, чтобы этот указатель указывал на память, выделенную для имени файла, кроме того, поле nMaxFile должно содержать максимальную длину имени файла, включая путь.
Пример инициализации:
// выделение памяти под строку для имени файла
filename=new char[100];
// инициализация строки
lstrcpy(filename,"");
// инициализация структуры (обнуление)
memset(&ofn, 0, sizeof(ofn));
ofn.lpstrFile=filename;
// максимальное количество символов в пути
ofn.nMaxFile=100;
// задаем размер структуры
ofn.lStructSize = sizeof(OPENFILENAME);
1.3.2. Вызов диалога открытия файла
Для вызова диалога открытия файла необходимо вызвать функцию GetOpenFileName, куда в качестве параметра передать адрес инициализированной переменной типа OPENFILENAME.
Функция GetOpenFileName:
BOOL GetOpenFileName( LPOPENFILENAME lpofn
// адрес структуры с инициализированными данными
);
lpofn - указатель на структуру OPENFILENAME, которая содержит данные для инициализации диалога.
Возвращает ненулевое значение, в случае успешного завершения, если пользователь нажал на кнопку OK, в противном случае (например, если пользователь просто закрыл диалоговое окно) возвращает ноль.
Пример вызова функции:
// вызываем диалог открытия файла
GetOpenFileName(&ofn);
1.3.3. Вызов диалога сохранения файла
Для вызова диалога сохранения файла необходимо вызвать функцию GetSaveFileName, куда в качестве параметра передать адрес инициализированной переменной типа OPENFILENAME. Параметры и возвращаемое значение аналогичны функции GetOpenFileName.
Результат вызова диалога открытия или сохранения, сохраняется в поле lpstrFile, указывает на буфер, содержащий имя файла выбранного в диалоге.
1.4. Стандартный диалог выбора цвета
Для того, чтобы вызвать стандартный диалог выбора цвета необходимо объявить переменную типа CHOOSECOLOR.
Пример объявления:
CHOOSECOLOR cl;
Структура CHOOSECOLOR.
typedef struct { // cc
DWORD lStructSize;
HWND hwndOwner;
HWND hInstance;
COLORREF rgbResult;
COLORREF* lpCustColors;
DWORD Flags;
LPARAM lCustData;
LPCCHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
} CHOOSECOLOR;
Опишем некоторые наиболее важные поля структуры:
lStructSize - размер структуры в байтах
hwndOwner - определяет окно, являющееся хозяином диалога
rgbResult - цвет, выбранный пользователем
lpCustColors - набор цветов, определенных пользователем
Flags - флаги, для инициализации стандартного диалога;
некоторые из флагов:
CC_ANYCOLOR - заставляет диалог отображать все возможные цвета
CC_FULLOPEN - заставляет диалог отображать дополнительный элементы, для того чтобы пользователь мог определить свои цвета
CC_PREVENTFULLOPEN - выключает кнопку "Определить цвет"
CC_RGBINIT - определяет цвет, определенный в rgbResult, как начальный выбранный цвет
CC_SHOWHELP - отображает кнопку помощи