Читайте также:
|
|
В процессе создания модального диалогового окна выделяются три этапа:
1) Разработка шаблона диалогового окна, описывающего внешний вид окна и его элементов управления.
2) Создание объекта класса или подкласса CDialog, являющегося оболочкой для шаблона диалогового окна.
3) Вызов функции-члена CDialog::DoModal для вывода окна на экран.
1. Шаблон диалогового окна
Первый шаг в создании диалогового окна – разработка шаблона. В нем описываются основные характеристики окна, начиная от его размеров, до свойств элементов управления. Хотя можно создавать шаблон окна программно, обычно они хранятся в виде ресурсов приложения, скомпилированных по содержимому RC-файла.
В качестве примера приведен шаблон диалогового окна с идентификатором ресурса IDD_MYDIALOG. В этом окне есть 4 ЭУ: строка ввода, статический элемент-метка строки ввода, кнопка OK и кнопка Отмена:
IDD_MYDIALOG DIALOG 0, 0, 160, 68
STYLE DS_MODALFRAME ¦ WS_POPUP ¦ WS_VISIBLE ¦ WS_CAPTION ¦ WS_SYSMENU
CAPTION "Введите свое имя"
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "&Имя", -1, 8, 14, 24, 8
EDITTEXT IDC_NAME, 34, 12, 118, 12, ES_AUTOHSCROLL
DEFPUSHBUTTON "OK", IDOK, 60, 34, 40, 14, WS_GROUP
PUSHBUTTON "Отмена", IDCANCEL, 112, 34, 40, 14, WS_GROUP
END
Все координаты и размеры задаются в единицах диалогового окна (dialog box units).
Вручную такие описания диалоговых окон делаются очень редко. В среде Visual C++ команда меню Insert ⇒ Resource позволяет добавить в проект пустой шаблон диалогового окна и затем отредактировать его в редакторе ресурсов. На рисунке показано окно редактора диалоговых окон, встроенного в Visual C++. Элементы управления можно выбирать в панели инструментов Controls и "рисовать" их в диалоговом окне (если панель инструментов Controls отсутствует на экране, ее можно включить командой меню Tools ⇒ Customize ⇒ Toolbars). Свойства диалогового окна (заголовок, шрифт, стиль) и свойства ЭУ доступны в окнах свойств, вызываемых командой Properties из контекстных меню.
Для всех, за исключением самых примитивных, диалоговых окон, кроме разработки шаблона требуется описать класс-оболочку как подкласс CDialog. В этом подклассе надо реализовать поведение конкретного окна. В целом, у подклассов CDialog часто перегружаются три виртуальные функции: инициализация элементов управления (OnInitDialog) и обработчики кнопок OK (OnOK) и Отмена (OnCancel).
При создании диалогового окна оно получает сообщение WM_CREATE, как и любое другое окно. Но в момент получения WM_CREATE в диалоговом окне еще не созданы ЭУ, описанные в шаблоне окна. Поэтому их нельзя проинициализировать в обработчике данного сообщения. Внутренняя оконная процедура диалоговых окон Windows обрабатывает сообщение WM_CREATE, как раз чтобы выполнить создание ЭУ. После того, как все они созданы, диалоговому окну посылается сообщение WM_INITDIALOG, чтобы окно смогло произвести необходимую инициализацию ЭУ. В подклассах CDialog сообщение WM_INITDIALOG приводит к вызову функции-члена OnInitDialog:
virtual BOOL OnInitDialog()
В OnInitDialog можно выполнить все действия, необходимые для подготовки окна к работе – например, пометить кнопку с зависимой фиксацией или поместить текст в строку ввода.
Чтобы по нажатию кнопок OK и Отмена вызывались виртуальные функции CDialog::OnOK и OnCancel, у этих кнопок в шаблоне окна должны быть идентификаторы IDOK и IDCANCEL.
Вполне возможно добавить в проект подкласс CDialog вручную, но эта типичная операция выполняется гораздо быстрее с помощью ClassWizard. Сначала надо вызвать его командой меню View ⇒ ClassWizard, нажать кнопку Add Class, выбрать из появившегося меню вариант New и заполнить окно с параметрами нового класса. В нем надо указать имя класса, имя базового класса (CDialog), и идентификатор ресурса для шаблона окна.
3. Создание модального диалогового окна
После того, как вы разработали шаблон диалогового окна и объявили подкласс CDialog, для создания и вывода модального диалогового окна осталось немного: создать объект вашего подкласса CDialog и вызвать у него функцию-член DoModal. DoModal вернет управление только после закрытия диалогового окна. В качестве возвращаемого значение будет передан параметр функции EndDialog. Конструктору CDialog в качестве параметров передается идентификатор ресурса шаблона и указатель на окно-владельца диалогового окна. Обычно в подклассах MFC заводится конструктор, который можно использовать вообще без параметров, например:
CMyDialog::CMyDialog(CWnd* pOwnerWnd = NULL):
CDialog(IDD_MYDIALOG, pOwnerWnd) {}
Такой конструктор позволяет создать и вызвать диалоговое окно всего двумя операторами:
CMyDialog dlg;
if (dlg.DoModal() == IDOK)
{
// Пользователь нажал кнопку OK
Разработка диалоговых окон для ввода данных. Реализация простого диалогового окна About. Использование переключателей для выбора графических образов с помощью диалогового окна. Использование диалогового окна для ввода текста и целых чисел. Использование д
Дата добавления: 2015-09-03; просмотров: 146 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
FindClose(hFindFile); | | | Схема последовательного технологического процесса |