Класс | Тип диалога |
CFileDialog | Выбор файла |
CFontDialog | Выбор шрифта |
CColorDialog | Выбор цвета |
CPageSetupDialog | Установка параметров страницы для печати |
CPrintDialog | Печать |
CFindReplaceDialog | Поиск и замена |
Это стандартные диалоговые окна которые используются в большинстве Win приложений для открытия и сохранения файлов, выполнения поиска и замены в документах и тд. Все эти диалоговые окна используются одинаково, хотя отдельные свойства и функции отличаются друг от друга в зависимости от назначения диалога. Для использования диалога надо выполнить следующзие пошаговые инструкции:
Чтобы лучше понять как все это действует, добавьте в приложение
класс CFileDialog.
Для этого добавьте функцию, обрабатывающую сообщение
о щелчке на кнопке File Open и вставьте в нее код из листинга 6.2
Листинг 6.2
void CDialogDlg::OnBnClicedBfileopen()
{
CFileDialog ldFile(TRUE);
if(ldFile.DoModal() == IDOK)
{
m_strResults = ldFile.GetFileName();
UpdateData(FALSE);
}
}
В этом фрагменте кода сначала объявляется экземпляр класса CFileDialog
CFileDialog ldFile(TRUE);
Данный экземпляр передает конструктору класса аргумент TRUE, который говорит классу, что это диалог открытия документа File Open.
Если передать аргументу FALSE, то на экране отобразится диалог сохранения файла File Save.Оба этих диалога отображаются с помощью вызова одной и той же функции, визуальные различия окон обусловлены различными значениями параметра.Конструктору можно передать несколько аргументов, задав тем самым расширения отображаемых файлов, маршрут и начальное имя файла по умолчанию, начальный путь к файлу по умолчанию и фильтры(маски) , используемые для отбора отображаемых имен файлов.Все эти аргументы конструктора имеют значение по умолчанию, так что не обязательно указывать явно ни одно из них.
Далее вызывается функция этого экземпляра DoModal().
if(ldFile.DoModal() == IDOK)
Это метод класса-предка CDialog, он доступен для всех диалогов. Функция DoModal отображает на экране диалог открытия документа File Open.
Чтобы узнать на какой из кнопок щелкнул пользователь, нужно проверить значение, возвращаемое методом.Если пользователь щелкнул на кнопке Open то возвращается значение IDOK(точно так же как и при вызове функции MessageBox).Указанный способ позволяет определить, должно ли приложение производить какие-либо действия над выбранным в диалоговом окне файлом.
Чтобы отобразить имя выбранного файла, присвойте переменной m_strResults значение, возвращаемое методом GetFileName класса FileDialog.
m_strResults = ldFile.GetFileName();
Это метод возвращает только имя файла, без пути к нему и имени устройства.
Чтобы получить путь к файлу, следует вызвать метод GetPathName,
m_strResults = ldFile.GetPathName();
а чтобы получить расширение файла - метод GetFileExt.
m_strResults = ldFile.GetFileExt();
Когда поставил вместо функции функцию GetPathName то программа стала возвращать путь к данному файлу, что очень удобно и приятно. Такая умная получилась программа!!
На рисунке показан диалог открытия файла :
Ниже перечислены наиболее важные функии класса CFileDialog:
Функция | Описание |
GetPathName | Возвращает полный путь выбранного файла |
GetFileName | Возвращает имя выбранного файла |
GetFileExt | Возвращает расширение выбранного файла |
GetFileTitle | Возвращает имя выбранного файла без расширения |
Все перечисленные методы не могут вызваться до тех пор, пока не будет вызван метод DoModal и пока он не вернет значение IDOK. Это правило справедливо для всех перечисленных в нескольких последующих таблицах методов прочих общих диалогов, за исключением особо оговоренных случаев.
Вверх
Таб 6.8
Основные методы класса CFontDialog
Библиотека MFC Класс CFontDialog
Класс CFontDialog инкапсулирует встроенный в Win стандартный диалог
выбора шрифта.В системе Win этот диалог постоянно используется для
выбора шрифта
Функция | Описание |
GetFaceName | Возвращает имя выбранного шрифта |
GetStyleName | Возвращает начертание выбранного шрифта(вид шрифта, тип шрифта)
(К одному типу шрифта может относиться несколько различных шрифтов) |
GetSize | Возвращает размер, указанный для выбранного шрифта |
GetColor | Возвращает цвет, указанный для выбранного шрифта |
GetWeight | Возвращает вес, указанный для выбранного шрифта |
IsStrikeOut | Возвращает логическое значение, позволяющее определить,
был ли выбран атрибут "зачеркнутый" (strike out) для выбранного шрифта |
IsUnderLine | Возвращает логическое значение, позволяющее определить
был ли выбран атрибут "полужирный" (bold) для выбранного шрифта |
IsItalic | Возвращает логическое значение, позволяющее определить, был ли выбран атрибут "курсив" (italic) для выбранного шрифта |
Вверх
Таб 6.9 Основные методы класса CColorDialog
Библиотека MFC Класс CColorDialog
Класс CColorDialog инкапсулирует встроенный в Win стандартный диалог
выбора цвета.В системе Win этот диалог постоянно используется для
выбора цвета.
Функция | Описание |
GetColor | Возвращает выбранный цвет |
GetSavedCustomColors | Возвращает массив созданных пользователем цветов |
GetCurrentColor | Устанавливает текущий цвет.Вызывать данный метод следует перед вызовом DoModal |
Вверх
Диалог вывода на печать, он позволяет выбрать принтер, размер
и поля страницы.
Таб 6.10 Основные методы класса CPageSetupDialog
Библиотека MFC Класс CPageSetupDialog
Функция | Описание |
CreatePrinterDC | Возвращает контекст устройства, используемого для печати |
GetDeviceName | Возвращает имя выбранного принтера |
GetDevMode | Возвращает структуру, содержащую информацию о выбранном принтере и его возможностях |
GetMargins | Этому методу передаются два указателя -либо на класс CRect, либо на структуру RECT -а он заности в класс либо структуру размеры полей и области печати |
GetPaperSize | Возвращает класс CSize, который определяет текущий размер бумаги |
GetDriverName | Возвращает имя драйвера выбранного принтера |
GetPortName | Возвращает имя выбранного порта вывода |
Вверх
Основные методы класса CPrintDialog
Библиотека MFC Класс CPrintDialog
Класс CPrintDialog инкапсулирует стандартный диалог Print.Этот класс
содержит большинство методов класса CPageSetupDialog, за исключением
мотодов PaperSize и GetMargin.Все остальные методы, приведенные
в таб 6.10 доступны в классе CPrintDialog.В таб 6.11 перечислены
прочие функции этого класса.
Функция | Описание |
GetCopies | Возвращает количество печатаемых копий |
GetFromPage | Возвращает номер конечной страницы ( в случае если был задан диапазон номеров печатаемых страниц) |
GetToPage | Возвращает номер конечной страницы ( в случае если был задан диапазон номеров печатаемых страниц) |
GetPrinterDC | Возвращает дескриптор контекста устройства для указанного принтера |
PrintAll | Возвращает логическое значение, позволяющее определить надо ли печатать все страницы текущего документа |
PrintCollate | Возвращает логическое значение, позволяющее определить, желает ли пользователь чтбы страницы были разобраны по копиям |
PrintRange | Возвращает логическое значение, позволяющее определить задан ли диапазон номеров печатаемых страниц |
PrintSellection | Возвращает логическое значение, позволяющее определить нужно ли печатать только выбранные элементы или страницы целиком |
Класс CFindReplaceDialog инкапсулирует стандартный диалог поиска и замены. В отличие от прочих диалогов, это окно немодальное : пока оно отображается на экране, пользователь может работать с главным окном приложения (родительским окном).Поэтому для отображения данного диалога надо вместо метода DoModal вызвать метод Create.
Метод Create требует два обязательных параметра, но всего может получать до пяти параметров:
Поскольку CFindReplaceDialog -это немодальный диалог, то использовать его в приложении надо по другому.Во первых не объявляйте переменную типа CFindReplaceDialog, а объявите указатель на экземпляр CFindReplaceDialog. а затем с помощью ключевого слова new создайте экземпляр диалога.
CFindReplaceDialog *m_pFRDlg;
m_pFRDlg = new CFindReplaceDialog;
Во вторых для получения сообщений от CFindReplaceDialog следует
зарегистрировать родительское окно.В начале файла с исходным кодом класса,
который будет получать сообщения, нужно объявить переменную идентификатора
сообщения:
static UINT WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING);
После регистрации сообщения от CFindReplaceDialog добавьте функцию, которая будет получать и обрабатывать эти сообщения.Для начала нужно добавить в ваш класс функцию, которая будет получать сообщения. Она должна возвращать значение, имеющее тип данных long.В качестве модификатора доступа следует указать protected(защищенный). Эта функция получает два параметра, один из которых имеет тип данных WPARAM, а второй - LPARAM.Добавив в класс эту функцию, откройте описание класса (в заголовочном файле) и добавьте перед описанием функции ключевое слово afx_msg.Описание заголовка класса для этой функции должно выглядеть примерно так :
DECLARE_VESSAGE_MAP()
...
class CMyClass : public CWnd
{
afx_msg long OnFindReplace(WPARAM wParam, LPARAM lParam);
Наконец чтобы дать возможность вашему классу получать сообщения от класса CFindReplaceDialog, добавьте запись в карту сообщений где-то в начале файла с исходным кодом.Посмотрев карту сообщений, можно увидеть множество записей, уже добавленных Мастером библиотеки MFC.Добавьте новую запись с помощью макроса ON_REGISTERED_MESSAGE:
BEGIN_MESSAGE_MAP()
Теперь ваш класс готов к обработке и получению сообщений от класса CFindReplaceDialog.Все это будет действовать следующим образом : Каждый раз, когда пользователь щелкает на кнопке Find Next или Replace, диалог Find/Replace посылает сообщения о событиях.Эти сообщения с помощью макроса ON_REGISTERED_MESSAGE направляются заданной вами функции-обработчику. рис 6.6
Ниже указаны основные методы класса CFindReplaceDialog, которые нужно вызывать в функции обработки сообщений, чтобы определить какую из операций выбрал пользователь.
Основные методы класса CFindReplaceDialog
Функция | Описание |
FindNext | Возвращает логическое значение, которое указывает нужно ли найти следующее вхождение искомой строки |
GetFindString | Возвращает введенную пользователем строку для поиска |
GetReplaceString | Возвращает введенную пользователем строку, которая должнв заменить строку поиска |
IsTerminating | Возвращает логическое значение, позволяющее определить, решил ли пользователь закрыть диалог Find/Replace |
MatchCase | Возвращает логическое значение, которое указывает нужно ли при поиске строки учитывать регистр |
MatchWholeWord | Возвращает логическое значение, которое указывает нужно ли искать только слово целиком |
ReplaceAll | Возвращает логическое значение, которое указывает нужно ли заменить все вхождения искомой строки |
ReplaceCurrent | Возвращает логическое значение, которое указывает нужно ли текущее найденное вхождение искомой строки |
SearchDown | Возвращает логическое значение, которое указывает нужно ли выполнять поиск вперед от текущей строки |
Назад |
Начало урока |
Вверх |
Вперед
Содержание