Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обмен данными с немодальным диалоговым окном

9.7K
27 января 2009 года
_Oleg_
43 / / 15.08.2006
Возникла необходимость реализовать обмен данными с немодальным диалоговым окном. Раньше это не делал.

Допустим на примере простого MDI приложения.
1.Создаю MDI приложение под именем Program, базовый класс CScrollView.
2.Добавляю в ресурсы Dialog (IDD_DIALOG1).
3.Добавляю класс CMyDialog (базовый класс CDialog)
4.Обьявляю указатель CMyDialog *dlg;
5.Вызываю данное диалоговое окно
 
Код:
if(!dlg)//Если окно не создано-создать
    {
        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);

Передавать же данные из немодального окна в класс документа у меня не получается - лезет ошибка
Цитата:
m_pszData CXX0030: ошибка: невозможно вычислить выражение


#include "ProgramDoc.h"//Подключаю файл класса документа
CProgramDoc *doc;//Обьявляю указатель на класс документа

Обрабатываю событие
UpdateData(FALSE);
doc->m_mainstring=m_dialogstring;

Подскажите пожалуйста в чем гвоздь программы. И как правильно организовать взаимодействие класса немодального окна и класса документа???
Заранее спасибо за ответ.

44K
27 января 2009 года
magfed
7 / / 12.01.2009
Цитата: _Oleg_

Обрабатываю событие
UpdateData(FALSE);
doc->m_mainstring=m_dialogstring;



Ну, во-первых, мне кажеться должно быть

 
Код:
UpdateData(TRUE);


А во вторых:
Цитата: _Oleg_

CProgramDoc *doc;//Обьявляю указатель на класс документа



НА КАКОЙ ОБЬЕКТ (документ) указывает Ваш указатель? Если судить по приведенному коду, Вы просто обьявили указатель, но не присвоили ему ЗНАЧЕНИЕ (он указывает в никуда).

9.7K
27 января 2009 года
_Oleg_
43 / / 15.08.2006
magfed
Цитата:
UpdateData(TRUE);

Согласен

Цитата:
НА КАКОЙ ОБЬЕКТ (документ) указывает Ваш указатель? Если судить по приведенному коду, Вы просто обьявили указатель, но не присвоили ему ЗНАЧЕНИЕ (он указывает в никуда).


Скорее всего так и есть. Некоторые ошибки были типа "Тако-то указатель используется без начального значения". Подскажите пожалуйста как правильно присвоить ему значение?

44K
27 января 2009 года
magfed
7 / / 12.01.2009
Ну, чтобы порекомендовать что-то более-менее сносное, надо видеть код целиком. Но вот может сработать такое решение.

Строку
 
Код:
CProgramDoc *doc;//Обьявляю указатель на класс документа


убрать, а переменную-укзатель CProgramDoc *doc обьявить в классе CMyDialog (как public). Потом, в том месте где создаеться обьект класса CMyDialog:

 
Код:
dlg=new CMyDialog;


дописать строчку

 
Код:
dlg->doc = this;


Вот. А далее все должно сработать:

 
Код:
UpdateData(TRUE);
this->doc->m_mainstring=m_dialogstring;


Вроде бы так.
9.7K
28 января 2009 года
_Oleg_
43 / / 15.08.2006
magfed
Спасибо тебе большое. Все оказалось очень просто!!! dlg->doc = this;
Я вчера очень много всего перепробовал))))
и dynamic_cast и передача через конструктор класса-диалога и др.
В общем спасибо. :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог