Стоит Windows 8 Pro, Visual Studio 2010 Express Edition . |
Диалоговые окна MFC
Общие (стандартные) диалоги
В библиотеки MFC предусмотрено несколько классов C++, предназначенных для поддержки общих (стандартных) диалогов
Классы стандартных диалогов | |
---|---|
Класс | Тип диалога |
CFileDialog | Выбор файла для чтения или записи |
CFontDialog | Выбор шрифта |
CColorDialog | Выбор цвета |
CPageSetupDialog | Установка параметров страницы для печати |
CPrintDialog | Печать |
CFindReplaceDialog | Поиск и замена |
Все эти диалоговые окна используются одинаково, хотя отдельные свойства и функции класса отличаются в зависимости от назначения диалога.
Для использования конкретного диалога нужно выполнить следующее
- Объявить переменную типа заданного класса (создать объект на стеке). Иногда лучше создать указатель на экземпляр класса, а затем запросить у операционной системы память на куче оператором new, своевременно освободив ее оператором delete после закрытия диалога и выборки из него необходимой информации
- Перед отображением диалога установить все его необходимые свойства
- Для отображения диалога вызвать метод DoModal() класса. Класс CFindReplaceDialog создает немодальное окно, поэтому для него вместо метода DoModal() нужно вызывать метод Create()
- Получить возвращаемое методом DoModal() значение, чтобы определить на какой кнопке щелкнул пользователь - на OK или Cancel
- Если пользователь щелкнул на кнопке OK, то прочитать все необходимые для дальнейшей работы приложения свойства, которые могли быть установлены пользователем в окне диалога. Для этого имеются методы доступа к свойствам класса, которые имеет смыcл применять для чтения только после того, как завершиться выбор пользователя нажатием кнопки OK
Любое диалоговое окно может отображаться в двух режимах:
- Модальном ( modal ) - всякое иное взаимодействие пользователя с приложением приостанавливается до закрытия диалога. Модальные диалоговые окна применяются тогда, когда без завершения забора информации от пользователя продолжение работы приложения будет неопределенным. Пример - типовые окна сообщений
- Немодальном ( modeless ) - пользователь может переключиться на основное окно приложения, не завершив диалог. Пример - окно "Find and Replace" (Найти и Заменить)
Класс CFileDialog
Класс CFileDialog реализует содание двух типов диалогов, который зависит от того, с каким аргументом для конструктора класса создается экземпляр - окно диалога:
" CFileDialog openFile(TRUE); // создается окно Open File " " CFileDialog saveFile(FALSE); // создается окно Save File
Конструктору можно передать несколько аргументов, задав тем самым расширения отображаемых файлов (фильтры), маршрут, начальное имя файла и начальный путь по умолчанию. Все эти аргументы конструктора имеют значения по умолчанию, так что не обязательно указывать явно ни один из них.
Основные методы доступа класса CFileDialog | |
---|---|
Функция | Описание |
GetPathName() | Возвращает полный путь выбранного файла |
GetFileName() | Возвращает имя выбранного файла |
GetFileExt() | Вовращает расширение выбранного файла |
GetFileTitle() | Возвращает имя выбранного фвйла без расширения (например, если был выбран файл "MyFile.txt", то вернется "MyFile" |
Примечание. Все перечисленные в таблице методы не могут вызываться до тех пор, пока не будет вызван метод DoModal() и пока он не вернет значение IDOK. Иначе в свойствах может храниться кодовый мусор.
Класс CFontDialog
Класс CFontDialog инкапсулирует встроенный в Windows стандартный диалог выбора шрифта. В таблице приводятся основные методы-члены класса CFontDialog.
Основные методы доступа класса CFontDialog | |
---|---|
Функция | Описание |
GetFaceName() | Возвращает имя выбранного шрифта. |
GetStyleName() | Возвращает начертание выбранного шрифта (вид шрифта, тип шрифта). К одному типу шрифта может относиться несколько различных шрифтов. |
GetSize() | Возвращает размер, указанный для выбранного шрифта. |
GetColor() | Возвращает цвет, указанный для выбранного шрифта. |
GetWeight() | Возвращает вес, указанный для выбранного шрифта. |
IsStrikeOut() | Возвращает логическое значение, позволяющее определить, был ли выбран атрибут "зачеркнутый" ( strike out ) для выбранного шрифта. |
IsUnderline() | Возвращает логическое значение, позволяющее определить, был ли выбран атрибут "подчеркнутый" ( underline ) для выбранного шрифта. |
IsBold() | Возвращает логическое значение, позволяющее определить, был ли выбран атрибут "полужирный" ( bold ) для выбранного шрифта. |
IsItalic() | Возвращает логическое значение, позволяющее определить, был ли выбран атрибут "курсив" ( italic ) для выбранного шрифта. |
Класс CColorDialog
Класс CColorDialog инкапсулирует стандартный диалог выбора цвета, используемый во многих Windows -приложениях для получения значений координат модели цвета RGB (RedGreenBlue) , которые затем можно передать любому методу интерфейса графических устройств GDI (Graphic Device Interface) , требующему код цвета. В таблице приводятся основные методы-члены класса CColorDialog
Основные методы доступа класса CColorDialog | |
---|---|
Функция | Описание |
GetColor() | Возвращает выбранный цвет. |
GetSavedCustomColor() | Возвращает массив созданных пользователем цветов. |
SetCurrentColor() | Устанавливает текущий цвет. Вызывать данный метод следует перед вызовом метода DoModal(). |
Класс CPageSetupDialog
Класс CPageSetupDialog инкапсулирует диалог Page Setup (параметры страницы), который используется для настройки вывода на печать.Этот диалог позволяет выбрать принтер, размер и поля печатаемой страницы. В таблице приводятся основные методы-члены класса CPageSetupDialog
Основные методы доступа класса CPageSetupDialog | |
---|---|
Функция | Описание |
CreatePrinterDC() | Возвращает контекст устройства, используемого для печати |
GetDeviceName() | Возвращает имя выбранного принтера |
GetDevMode() | Возвращает структуру, содержащую информацию о выбранном принтере и его возможностях (цветной или черно-белый) |
GetMargins() | Этому методу в качестве аргументов передаются два указателя - либо на класс CRect, либо на структуру RECT, - а он заносит в класс или структуру размеры полей и области печати |
GetPaperSize() | Возвращает класс CSize, который определяет текущий размер бумаги |
GetDriveName() | Возвращает имя драйвера выбранного принтера |
GetPortName() | Возвращает имя выбранного порта вывода |
Класс CPrintDialog
Класс CPrintDialog инкапсулирует стандартный диалог Print. Он содержит большинство методов класса CPageSetupDialog, за исключением методов GetMargins() и GetPaperSize(). Прочие важные функции класса CPrintDialog приведены в таблице
Прочие важные методы доступа класса CPrintDialog | |
---|---|
Функция | Описание |
GetCopies() | Возвращает количество печатаемых копий |
GetFromPage() | Возвращает номер начальной страницы (в случае, если был задан диапазон номеров печатаемых страниц) |
GetToPage() | Возвращает номер конечной страницы (в случае, если был задан диапазон номеров печатаемых страниц) |
GetPrinterDC() | Возвращает дескриптор контекста устройства для указанного принтера |
PrintAll() | Возвращает логическое значение, позволяющее определить, нужно ли печатать все страницы текущего документа |
PrintCollate() | Возвращает логическое значение, позволяющее определить, желает ли пользователь, чтобы страницы были разобраны по копиям |
PrintRange() | Возвращает логическое значение, позволяющее определить, задан ли диапазон номеров печатаемых страниц |
PrintSelection() | Возвращает логическое значение, позволяющее определить, нужно ли печатать только выбранные элементы или страницы целиком |
В отличие от методов класса CPageSetupDialog, метод CreatePrinterDC() можно вызывать без предварительного вызова метода DoModal(). Отображать этот диалог перед печатью необязательно, но класс CPrintDialog можно использовать для получения информации о принтере и контексте устройства.
Класс CFindReplaceDialog
Класс CFindReplaceDialog инкапсулирует стандартный диалог поиска и замены. В отличии от других стандартных диалогов, это окно немодальное, поэтому для отображения данного диалога нужно вызывать вместо метода DoModal() метод Create(). Метод Create() может принимать пять параметров, два первых из которых обязательны:
- Первый параметр - это логическое значение, указывающее, предназначается ли диалог только для поиска ( TRUE ) или для поиска и замены ( FALSE )
- Второй параметр - строка, которую нужно искать
- Третий параметр - строка замены
- Четвертый параметр - направление поиска. По умолчанию задано направление "вперед" (обозначается константой FR_DOWN ). Направление "назад" устанавливается значением 0
- Пятый параметр - указатель на родительское окно приложения
Принципы работы с классом CFindReplaceDialog более сложные, чем с другими классами стандартных диалогов. Мы их здесь рассматривать не будем. В таблице приводятся основные методы-члены класса CFindReplaceDialog
Подключение стандартного диалога File Open к приложению
- Создайте обработчик для кнопки "Диалог File Open"
-
Заполните его кодом
Обработчик для щелчка по кнопке "Диалог File Open" void CDialogsDlg::OnBnClickedBFileopen() { CFileDialog openFile(TRUE); // Создать диалог if(openFile.DoModal() == IDOK){ // Отобразить и получить результат m_strResult = openFile.GetFileName(); // Сохранить имя файла UpdateData(FALSE); // Передать на экран } }