Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб 5.doc
Скачиваний:
3
Добавлен:
08.05.2019
Размер:
462.34 Кб
Скачать

Создание приложения с модальной диалоговой панелью.

Рассмотрим процесс создания такого приложения.

  1. Используя MFC AppWizard, создадим приложение с главным окном без строки состояния и панели инструментов.

  2. Используя редактор ресурсов, изменим главное меню приложения. При этом добавим в меню пункт "Модальный диалог" с идентификатором ID_MODAL.

  3. Используя ClassWizard, добавим обработчик команды ID_MODAL в класс CMainFrame.

  4. Используя редактор ресурсов, создадим новое диалоговое окно вида

Для кнопок зададим идентификаторы IDOK, IDC_RESET и IDCANCEL соответственно. Для элемента редактирования зададим идентификатор IDC_EDIT.

Изменим заголовок диалогового окна на "Ввод текста"

  1. Используя ClassWizard, создадим новый класс на базе класса CDialog. Добавим переменную класса m_Edit типа CString для элемента IDC_EDIT. Добавим методы для обработки событий WM_INITDIALOG для объекта CMyDialog, BN_CLICKED для элемента IDC_RESET, а также BN_CLICKED для элемента IDOK.

  2. Используя редактор, добавим обработчики указанных событий в файл MyDialog.cpp:

BOOL CMyDialog::OnInitDialog()

{

CDialog::OnInitDialog();

m_Edit = "Пустой текст";

UpdateData(FALSE);

return TRUE; // return TRUE unless you set the focus to a control

// EXCEPTION: OCX Property Pages should return FALSE

}

void CMyDialog::OnReset()

{

m_Edit = "Текст по умолчанию";

UpdateData(FALSE);

}

void CMyDialog::OnOK()

{

UpdateData(TRUE);

CDialog::OnOK();

}

  1. Используя текстовый редактор, добавим обработку события по команде ID_MODAL в класс CMainFrame:

#include "MyDialog.h"

void CMainFrame::OnModal()

{

CMyDialog dialog;

int ret = dialog.DoModal();

switch ( ret )

{

case IDOK:

AfxMessageBox(dialog.m_Edit);

break;

case IDCANCEL:

AfxMessageBox("Текст по умолчанию");

break;

}

}

Приступим к рассмотрению исходных текстов приложения. При обработке команды ID_MODAL сначала создается объект dialog класса CMyDialog, который будет представлять диалоговую панель. Когда объект dialog создан, диалоговая панель еще не появляется на экране, для этого нужно воспользоваться методом DoModal, определенным в классе CDialog.

virtual int CDialog::DoModal() - создает и активизирует модальный диалог, осуществляет его взаимодействие с пользователем,удаляет его после завершения работы и возвращает целое значение типа IDOK или IDCANCEL. В случае ошибки при создании диалога возвращает -1.

При вызове метода DoModal выполнение метода класса CMainFrame приостанавливается, пока пользователь не закроет диалоговую панель.

Когда диалоговая закрыта, при помощи окна сообщений отображается состояние переменной dialog.m_Edit, которая соответствует полю ввода диалоговой панели.

Класс диалоговой панели CMyDialog наследуется от класса CDialog. Этот класс предназначен для управления диалоговой панелью приложения.

Следует обратить внимание на определение конструктора класса CMyDialog. После названия конструктора стоит двоеточие и название конструктора класса CDialog. При этом в качестве параметров ему передается идентификатор диалоговой панели и указатель на родителькое окно:

CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/)

: CDialog(CMyDialog::IDD, pParent)

{

//{{AFX_DATA_INIT(CMyDialog)

m_Edit = _T("");

//}}AFX_DATA_INIT

}

Основное назначение конструктора CMyDialog - вызвать конструктор класса CDialog. Именно конструктор класса CDialog выполняет создание диалоговой панели.

В конструкторе также инициализируется переменная m_Edit, входящая в класс CMyDialog. В нее записывается пустая строка текста.