Диалоговые окна могут быть модальными и немодальными. Пока работает модальное окно, все остальные окна работать не могут. В то же время могут одновременно работать несколько немодальных окон.
Чтобы вызвать DoModal(), нужно создать объект класса Dlg. Назовём его dlg1.
Нужно также помнить, что обработка данных происходит в классе документа (CdiaDoc), а результаты выводятся в CdiaView. Поэтому в CdiaDoc нужно определить элемент данных m_stroka типа CString с меткой доступа public. Как уже было сказано выше, для этого нужно выделить класс CdiaDoc, вызвать контекстное меню, выбрать Add/Add Variable и в окне ввести public, CString, m_stroka.
Ниже приводится текст обработчика.
void CdiaView::OnFileShowdialog()
{
Dlg dlg1;//Создалиобъект
intrezult=(int)dlg1.DoModal();//Чтобы отобразить диалог в модальном режиме вызвали DoModal(). При щелчке на кнопке Ок,возвращается значение IDOK
if(rezult==IDOK)
{
CdiaDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->m_stroka=dlg1.m_text;//Занесливэлемент
//данных m_stroka класса Doc значение m_text класса Dlg
Invalidate();//Обьявлено, что содержимое окна //недействительно и может быть заменено
// TODO: Add your command handler code here
}
}
Внимание! Чтобы класс CdiaView мог работать с классом Dlg, необходимо в файл diaView.cpp добавить
#include “Dlg.h”
2.4.4 Отображение в клиентском окне
Известно, что для отображения в клиентском окне служит метод OnDraw().
void CdiaView::OnDraw(CDC* pDC/*pDC*/)
{
CdiaDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
pDC->TextOutA(0,0,pDoc->m_stroka);//Добавлено
// TODO: add draw code for native data here
}
В нём добавлено вызов с помощью указателя pDC на контекст CDC метода TextOutA() вывода строки символов на экран в область с координатами (0, 0). Выводимый текст содержит переменная m_stroka класса CdiaDoc. Поэтому для работы с ней используется указатель pDoc.
Программа готова. После её запуска выбрать пункт меню Show Dialog… В появившемся диалоговом окне нажать кнопку. Убедиться в появлении заданной строки символов в текстовом окне. После выбора кнопки Ok этот же текст отобразится в клиентской области главного окна.
3 Контрольные вопросы
1 Как создать диалоговое окно?
2 Как создать класс диалогового окна?
3 Как создать обработчик нажатия стартовой кнопки ?
4 Зачем нужно создавать элементы данных типа CString для классов Dlg и CdiaDoc?
5 Зачем нужна функция DoModal() и что она возвращает?
6 Чем модальные окна отличаются от немодальных?
7 Для чего служит функция UpdateData(), какие значения принимает её параметр и что они означают?
8 Для чего служит функция Invalidate()?
9 Какая функция служит для вывода строки символов на экран и какие у неё параметры?
10 Как создать обработчик события- выбора пункта меню ?
Список литературы
1 Айвор Хортон VISUAL C++ 2005 Базовый курс, «Диалектика», Москва*Санкт-Петербург*Киев , 2007г.
2 Сергеев А.П., Терен А.Н. Программирование в VISUAL C++ 2005 «Диалектика», Москва*Санкт-Петербург*Киев , 2006г.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.