Обмен данными с немодальным диалоговым окном
Допустим на примере простого MDI приложения.
1.Создаю MDI приложение под именем Program, базовый класс CScrollView.
2.Добавляю в ресурсы Dialog (IDD_DIALOG1).
3.Добавляю класс CMyDialog (базовый класс CDialog)
4.Обьявляю указатель CMyDialog *dlg;
5.Вызываю данное диалоговое окно
{
dlg=new CMyDialog;
dlg->Create(IDD_DIALOG1);
}
else//Если создано - сделать активным и показать
{
dlg->SetActiveWindow();
dlg->ShowWindow(SW_NORMAL);
}
6.В свойствах окна "Видимое" - значение TRUE
Модальное окно готово.
Вешаю на диалоговое окно элемент управления EditBox (IDC_EDIT1) и добаляю к нему переменную типа CString m_dialogstring (public)
Добавляю в класс документа (CProgramDoc) переменную типа CString m_mainstring (public)
Теперь надо организовать взаимодействие <-> данных переменных.
Передавать данные в немодальное диалоговое окно у меня получается
dlg->m_dialogstring=m_mainstring;
dlg->UpdateData(FALSE);
Передавать же данные из немодального окна в класс документа у меня не получается - лезет ошибка
#include "ProgramDoc.h"//Подключаю файл класса документа
CProgramDoc *doc;//Обьявляю указатель на класс документа
Обрабатываю событие
UpdateData(FALSE);
doc->m_mainstring=m_dialogstring;
Подскажите пожалуйста в чем гвоздь программы. И как правильно организовать взаимодействие класса немодального окна и класса документа???
Заранее спасибо за ответ.
Обрабатываю событие
UpdateData(FALSE);
doc->m_mainstring=m_dialogstring;
Ну, во-первых, мне кажеться должно быть
А во вторых:
CProgramDoc *doc;//Обьявляю указатель на класс документа
НА КАКОЙ ОБЬЕКТ (документ) указывает Ваш указатель? Если судить по приведенному коду, Вы просто обьявили указатель, но не присвоили ему ЗНАЧЕНИЕ (он указывает в никуда).
Согласен
Скорее всего так и есть. Некоторые ошибки были типа "Тако-то указатель используется без начального значения". Подскажите пожалуйста как правильно присвоить ему значение?
Строку
убрать, а переменную-укзатель CProgramDoc *doc обьявить в классе CMyDialog (как public). Потом, в том месте где создаеться обьект класса CMyDialog:
дописать строчку
Вот. А далее все должно сработать:
this->doc->m_mainstring=m_dialogstring;
Вроде бы так.
Спасибо тебе большое. Все оказалось очень просто!!! dlg->doc = this;
Я вчера очень много всего перепробовал))))
и dynamic_cast и передача через конструктор класса-диалога и др.
В общем спасибо. :)