Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
193-224.doc
Скачиваний:
1
Добавлен:
11.11.2019
Размер:
378.88 Кб
Скачать

Стандартные диалоговые окна

Операционная система Windows предоставляет набор стандартных диалоговых окон, которые поддерживаются классами МFC. С помощью этих окон пользователь может открыть и сохранить файлы, найти и заменить текст в документе, выполнить настройку параметров принтера и вывести на печать документ, предварительно определив параметры его страницы. При использовании стандартных диалоговых окон нет необходимости создавать ресурсы шаблонов диалоговых окон, поскольку они уже определены в соответствующих файлах .dlg.

Все стандартные диалоговые окна являются производными от базового класса CCommonDialog, который, в свою очередь, порождается классом CDialog. Список классов стандартных диалогов приведен в таблице 7.2.

Т а б л и ц а 7.2

Список классов стандартных диалоговых окон

Класс

Заголовок

Назначение

CColorDialog

Edit Colors

Выбор или создание цвета

CFileDialog

File Open Save File As

Открытие нового или существующего файла Сохранение файла

CFindReplaceDialog

Find Replace

Поиск и замена в документе одних символов другими

CPageSetupDialog

Page Setup

Ввод параметров страницы документа

CFontDialog

Font

Выбор шрифта из списка доступных шрифтов

CPrintDialog

Print Setup Print

Настройка принтера и печать документа

Ниже приводится краткая характеристика классов стандартных диалоговых окон.

Диалоговые окна File Open и Save File As

Класс CFileDialog поддерживает диалоговые окна File Open и Save File As (рис.7.12). Эти диалоговые окна обеспечивают возможность пользователю просмотреть файловую систему и выбрать файл для чтения или записи.

Рис. 7.12. Стандартное диалоговое окно File Open

Ресурс шаблона этих окон хранится в файле сценария ресурсов fileopen.dlg. Для использования диалоговых окон открытия и сохранения файлов в MFC-приложениях сначала необходимо сконструировать объект CFileDialog. Прототип конструктора приводится ниже.

CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );

Параметры конструктора следующие: bOpenFileDialog — тип диалогового окна (TRUE для окна File Open и FALSE для окна Save File As); lpszDefExt — расширение имени файла по умолчанию, если расширение не NULL, то к имени файла оно присоединяется автоматически; lpszFileName — имя файла, которое появляется в окне при его открытии, если указано NULL, то никакое имя в поле имени файла не появляется; dwFlags — комбинация флагов, которые позволяют настроить диалоговое окно; lpszFilter — фильтры типов файлов, отображаются в комбинированном списке типов; pParentWnd— указатель на объект родительского окна или окна-владельца.

После конструирования объекта диалогового окна File Open или Save File As инициализация его элементов управления осуществляется присваиванием значений полям структуры OPENFILENAME. Для этого в классе CFileDialog инкапсулирована переменная m_ofn типа OPENFILENAME. Настройка диалогового окна выполняется до его отображения, которое реализуется функцией DoModal()класса CFileDialog. После закрытия диалогового окна приложение может получить из этой структуры выбор пользователя.

Ниже приводится фрагмент объявления структуры OPENFILENAME, заданной в файле CommDlg.h:

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; //флаги, определяющие инициализацию окна } OPENFILENAME;

Сконструированная строка фильтра присваивается полю m_ofn.lpstrFilter объекта класса CFileDialog. Если файл выбран, то его имя можно получить как значение поля m_ofn.lpstrFile. Заголовок диалогового окна можно задать с помощью поля m_ofn.lpstrTitle. Можно получить выбранный пользователем в диалоговом окне файл с помощью функции CFileDialog::GetPathName(), прототип которой показан ниже.

CString CFileDialog::GetPathName() const;

Если был разрешен выбор множества файлов, то итератор списка имен файлов можно получить с помощью функции CFileDialog::GetStartPosition(), которая возвращает позицию элемента с коллекции объектов. Отдельные имена файлов можно получить, вызывая повторно функцию CFileDialog::GetPathName() с этим итератором. Прототип функции такой.

POSITION CFileDialog::GetStartPosition() const;

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

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