Назад | Начало урока | Вперед
Содержание

День 6 (продолжение 1)

  • Общие или стандартные диалоги
  • Библиотека MFC Класс CFileDialog
  • Библиотека MFC Класс CFontDialog
  • Библиотека MFC Класс CColorDialog
  • Библиотека MFC Класс CPageSetupDialog
  • Библиотека MFC Класс CPrintDialog
  • Библиотека MFC Класс CFindReplaceDialog
    Вверх
    Общие или стандартные диалоги
    Таблица 6.6 Классы общих диалогов

    Класс Тип диалога
    CFileDialog Выбор файла
    CFontDialog Выбор шрифта
    CColorDialog Выбор цвета
    CPageSetupDialog Установка параметров страницы для печати
    CPrintDialog Печать
    CFindReplaceDialog Поиск и замена

    Это стандартные диалоговые окна которые используются в большинстве Win приложений для открытия и сохранения файлов, выполнения поиска и замены в документах и тд. Все эти диалоговые окна используются одинаково, хотя отдельные свойства и функции отличаются друг от друга в зависимости от назначения диалога. Для использования диалога надо выполнить следующзие пошаговые инструкции:

    1. Объявить переменную типа заданного класса
    2. Перед изображением диалога установить все его необходимые свойства.
    3. Для отображения диалога вызвать метод DoModal класса
    4. Получить возвращаемое методом DoModal значение, чтобы определить на какой из кнопок щелкнул пользователь -OK или Cancel.
    5. Если пользователь щелкнул на OK , то прочитать все свойства которые могли быть установлены во время работы пользователя с диалогом.

    Чтобы лучше понять как все это действует, добавьте в приложение класс 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();

    АВ: Приложение работает правильно!При нажатии на кнопку File Open открывается диалоговое окно открытия файла и при выбре файла и нажатии OK в нашем окне Edit Box главного окна приложения появляется название (имя) выбранного нами файла вместе с расширением. Попробую теперь вместо функции GetFileName поставить функцию GetPathName.

    Когда поставил вместо функции функцию GetPathName то программа стала возвращать путь к данному файлу, что очень удобно и приятно. Такая умная получилась программа!!

    Подсказка


    Диалоговое окно может быть в двух режимах - модальном и не модальном. Раскрытое модальное окно не позволяет работать в приложением, пока не щелкнам кнопкой на модальном окне. Раскрытое немодальное окно позволяет работать с приложеием - пример диалоговые окна Find и Find and Replace редактора Microsoft Word

    Вверх

    Библиотека MFC Класс CFileDialog

    Класс CFileDialog инкапсулирует встроенные в операционную систему Windows функциональные возможности диалогов File Open и File Save.Это позволяет показвать пользователю те же самые диалоговые окна выбора файлов, что и в других Win приложениях.

    На рисунке показан диалог открытия файла :

    Подсказка

    Ниже перечислены наиболее важные функии класса CFileDialog:

    Функция Описание
    GetPathName Возвращает полный путь выбранного файла
    GetFileName Возвращает имя выбранного файла
    GetFileExt Возвращает расширение выбранного файла
    GetFileTitle Возвращает имя выбранного файла без расширения

    Все перечисленные методы не могут вызваться до тех пор, пока не будет вызван метод DoModal и пока он не вернет значение IDOK. Это правило справедливо для всех перечисленных в нескольких последующих таблицах методов прочих общих диалогов, за исключением особо оговоренных случаев.

    Вверх

    Библиотека MFC Класс CFontDialog

    Класс CFontDialog инкапсулирует встроенный в Win стандартный диалог выбора шрифта.В системе Win этот диалог постоянно используется для выбора шрифта

    Подсказка

    Таб 6.8 Основные методы класса CFontDialog

    Функция Описание
    GetFaceName Возвращает имя выбранного шрифта
    GetStyleName Возвращает начертание выбранного шрифта(вид шрифта, тип шрифта)
    (К одному типу шрифта может относиться несколько различных шрифтов)
    GetSize Возвращает размер, указанный для выбранного шрифта
    GetColor Возвращает цвет, указанный для выбранного шрифта
    GetWeight Возвращает вес, указанный для выбранного шрифта
    IsStrikeOut Возвращает логическое значение, позволяющее определить,
    был ли выбран атрибут "зачеркнутый" (strike out) для выбранного шрифта
    IsUnderLine Возвращает логическое значение, позволяющее определить
    был ли выбран атрибут "полужирный" (bold) для выбранного шрифта
    IsItalic Возвращает логическое значение, позволяющее определить,
    был ли выбран атрибут "курсив" (italic) для выбранного шрифта

    Вверх

    Библиотека MFC Класс CColorDialog

    Класс CColorDialog инкапсулирует встроенный в Win стандартный диалог выбора цвета.В системе Win этот диалог постоянно используется для выбора цвета.

    Подсказка

    Таб 6.9 Основные методы класса CColorDialog

    Функция Описание
    GetColor Возвращает выбранный цвет
    GetSavedCustomColors Возвращает массив созданных пользователем цветов
    GetCurrentColor Устанавливает текущий цвет.Вызывать данный метод следует перед вызовом DoModal

    Вверх

    Библиотека MFC Класс CPageSetupDialog

    Диалог вывода на печать, он позволяет выбрать принтер, размер и поля страницы.

    Подсказка

    Таб 6.10 Основные методы класса CPageSetupDialog

    Функция Описание
    CreatePrinterDC Возвращает контекст устройства, используемого для печати
    GetDeviceName Возвращает имя выбранного принтера
    GetDevMode Возвращает структуру, содержащую информацию о выбранном принтере и его возможностях
    GetMargins Этому методу передаются два указателя -либо на класс CRect,
    либо на структуру RECT -а он заности в класс либо структуру размеры полей и области печати
    GetPaperSize Возвращает класс CSize, который определяет текущий размер бумаги
    GetDriverName Возвращает имя драйвера выбранного принтера
    GetPortName Возвращает имя выбранного порта вывода

    Вверх

    Библиотека MFC Класс CPrintDialog

    Класс CPrintDialog инкапсулирует стандартный диалог Print.Этот класс содержит большинство методов класса CPageSetupDialog, за исключением мотодов PaperSize и GetMargin.Все остальные методы, приведенные в таб 6.10 доступны в классе CPrintDialog.В таб 6.11 перечислены прочие функции этого класса.

    Основные методы класса CPrintDialog

    Функция Описание
    GetCopies Возвращает количество печатаемых копий
    GetFromPage Возвращает номер конечной страницы ( в случае если был задан диапазон номеров печатаемых страниц)
    GetToPage Возвращает номер конечной страницы ( в случае если был задан диапазон номеров печатаемых страниц)
    GetPrinterDC Возвращает дескриптор контекста устройства для указанного принтера
    PrintAll Возвращает логическое значение, позволяющее определить надо ли печатать все страницы текущего документа
    PrintCollate Возвращает логическое значение, позволяющее определить, желает ли пользователь чтбы страницы были разобраны по копиям
    PrintRange Возвращает логическое значение, позволяющее определить задан ли диапазон номеров печатаемых страниц
    PrintSellection Возвращает логическое значение, позволяющее определить нужно ли печатать только выбранные элементы или страницы целиком
    Вверх

    Библиотека MFC Класс CFindReplaceDialog

    Класс CFindReplaceDialog инкапсулирует стандартный диалог поиска и замены. В отличие от прочих диалогов, это окно немодальное : пока оно отображается на экране, пользователь может работать с главным окном приложения (родительским окном).Поэтому для отображения данного диалога надо вместо метода DoModal вызвать метод Create.

    Метод Create требует два обязательных параметра, но всего может получать до пяти параметров:

    1. Первый параметр - логическое значение, указывающее, предназначается ли диалоговое окно только для поиска или для поиска и замены.Если в качестве первого аргумента передать TRUE , то отображается диалоговое окно поиска, а если FALSE -то поиска и замены.
    2. Второй параметр - строка которую нужно искать
    3. Третий (необязательный параметр) -замещающая цепочка сиволов
    4. Четвертый параметр задает направление поиска.По умолчанию - направление вперед.(обозначается константой FR_DOWN)Назначение "назад" устанавливается передачей в параметре значения 0.
    5. Пятый параметр - указатель на родительское окно приложения

    Совет : Принципы работы с классом CFindReplaceDialog более сложны чем с прочими классами общих диалогов.Если вы испытываете трудности при работе с этим классом, то вернитесь к этому материалу не ранее чем изучите главу 14 данной книги.

    Поскольку 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.Описание заголовка класса для этой функции должно выглядеть примерно так :

    class CMyClass : public CWnd
    {

    ... protected:
    afx_msg long OnFindReplace(WPARAM wParam, LPARAM lParam);

    DECLARE_VESSAGE_MAP()

    ...

    }

    Наконец чтобы дать возможность вашему классу получать сообщения от класса 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 Возвращает логическое значение, которое указывает нужно ли выполнять поиск вперед от текущей строки

    Назад | Начало урока | Вверх | Вперед
    Содержание

    Hosted by uCoz