DDX_Text(pDX, IDC_EDIT1, m_text);
//}}AFX_DATA_MAP }
Для обновления текстового поля следует вызвать метод UpdateData():
void Dlg::OnButton1() { m_text = «Текст в диалоговом окне»; UpdateData(false); }
Вызов этого метода с параметром false заносит в текстовое поле значение переменной m_text. Вызов с параметром true присваивает переменной m_text содержимое текстового поля:
UpdateData(false) означает: IDC_EDIT = m_text; UpdateData(true) означает: m_text = IDC_EDIT;
Строка перенесена в текстовое поле, пользователь может отредактировать ее перед нажатием кнопки Ок.
Переопределение метода для кнопки ОК Метод для кнопки ОК добавляется точно так же, как и для любой другой кнопки. Воспользуйтесь ClassWizard и свяжите метод OnOK() с кнопкой ОК, идентификатор которой равен IDOK:
void Dlg::OnOK() { // TODO: Add extra validation here CDialog::OnOK(); }
Мы хотим занести в переменную m_text содержимое текстового поля, для чего вызовем UpdateData() со значением true:
void Dlg::OnOK() { // TODO: Add extra validation here UpdateData(true); CDialog::OnOK(); }
Отображение диалогового окна Наше диалоговое окно должно появляться при выборе команды 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;
|