Наше диалоговое окно должно появляться при выборе команды File->Show Dialog… Данная команда связана с методом OnFileShowdialog() класса вида:
void CDialogsView::OnFileShowdialog()
{
// TODO: Add your command handler code here
}
В этом методе создадим новый объект класса Dlg и отобразим его, пользуясь методом DoModal(). Чтобы класс вида мог работать с членами класса Dlg, необходимо включить в него Dlg.h.
Теперь можно воспользоваться классом Dlg в классе вида. Начнем с создания объекта dlg этого класса и отобразим диалог на экране:
void CDialogsView::OnFileShowdialog()
{
Dlg dlg;
int result = dlg.DoModal();
}
Теперь убедимся, что пользователь нажал кнопку ОК:
void CDialogsView::OnFileShowdialog()
{
Dlg dlg;
int result = dlg.DoModal();
if (result == IDOK)
{
}
}
Если пользователь действительно нажал кнопку ОК, необходимо прочесть содержимое текстовой строки из переменной m_text. Оно хранится в документе, поэтому сначала нужно получить указатель на документ:
void CDialogsView::OnFileShowdialog()
{
Dlg dlg;
int result = dlg.DoModal();
if (result == IDOK)
{
CDialogDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
}
}
Создадим в документе новый объект класса CString с именем StringData. В этот объект будет помещен текст из переменной m_text:
|
|
void CDialogsView::OnFileShowdialog()
{
Dlg dlg;
int result = dlg.DoModal();
if (result == IDOK)
{
CDialogsDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->StringData = dlg.m_text;
Invalidate();
}
}
Для вывода строки в клиентской области мы вызвали метод Invalidate(). Теперь осталось изменить метод OnDraw():
void CDialogsView::OnDraw(CDC* pDC)
{
CDialogsDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(0, 0, pDoc->StringData);
// TODO: add draw code for native data here
}
Программа готова (рис. 24 - 26).
Рис. 24. Программа dialogs
Рис. 25. Новое диалоговое окно
Рис. 26. Данные, полученные из диалогового окна.