Создание диалогового окна когда главным является «Документ» (Лабораторная работа № 7 по VisualC++ 2005), страница 2

Обмен информацией между переменной m_text и элементом IDC_EDIT1       осуществляется в методе DoDataExchange().В ней вызываются созданные мастером Class Wizard специальные процедуры, позволяющие привязать созданные им элементы данных к элементам управления диалоговых окон. Эти процедуры носят названия «обмен данными диалогового окна» и «проверка данных диалогового окна»(DDX/DDV Dialog Data Exchange and Dialog Data Validation).

Функция DDX_Text() перемещает данные между переменной m_text и элементом редактирования IDC_EDIT1.

void Dlg::DoDataExchange(CDataExchange* pDX)

{

    CDialog::DoDataExchange(pDX);//Было

    DDX_Text(pDX,IDC_EDIT1,m_text);//Добавлено

}

Функция DDX_Text() появилась в результате добавления элемента данных m_text, когда было выделено текстовое окно, в контекстном меню выбрано Add Variable и в строке Category Control изменено на Value. Можно было добавить m_text и другим способом, когда выделяется класс, вызывается контекстное меню и внем выбирается Add Variable. В этом случае строка Category  неактивная. Придется самостоятельно задавать тип переменной CString а также вводить в метод DoDataExchange() вызов функции DDX_Text().

2.4.2 Обработчик нажатия кнопки Ok

     Нужно обеспечить прочтение содержимого текстового окна в m_text

тоесть присвоить m_text=IDC_EDIT1 и затем вывести его на клиентскую область при нажатии кнопки Oк. Для этого нужно создать обработчик нажатия этой кнопки. В принципе в данной программе содержимое текстового окна не изменялось, поэтому  можно обойтись без присваивания и без создания этого обработчика. Но в общем случае  текст вокне может быть изменен. Поэтому есть смысл показать как быть в этом случае.

Нужно выделить в диалоговом окне кнопку  Ок, вызвать контекстное меню и щёлкнуть по Add Event Handler. В появившемся окне выбрать BN_CLICKED и  класс Dlg. После нажатия Add and Edit получается обработчик

void Dlg::OnBnClickedOk()

{

    // TODO: Add your control notification handler code here

OnOK();

}

Для того, чтобы обеспечить присваивание содержимого текстового окна с именем IDC_EDIT1 переменной m_text, следует использовать метод UpdateData (true), но теперь уже с параметром true.

void Dlg::OnBnClickedOk()

{

    UpdateData(true);//Добавили

    // TODO: Add your control notification handler code here

OnOK();//Было

}

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

Необходимо создать обработчик выбора пункта меню «Show Dialg…».

Для этого необходимо открыть редактор меню. Если в заголовке окна редактирования есть требуемый dia.rc(IDR_MAINRAME-Menu), то просто щёлкнуть на нём. Иначе- выбрать вкладку Resource View, раскрыть папку menu, выделить пункт  IDR_MAINFRAME , вызвать контекстное меню , щёлкнуть на  open. В окне редактора меню выбрать пункт «Show Dialog…», вызвать контекстное меню, щёлкнуть на Add Event Handler. В появившемся окне выбрать COMMAND и Dlg. После нажатия кнопки Add and Edit появится обработчик   void CdiaView::OnFileShowdialog(). В нём нужно использовать функцию DoModal(), которая вызывает т.н. модальное окно.