Отображение диалогового окна

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: