Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача указателя на класс документа 
V
    Опции темы
Proletariy
Дата 27.1.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Возникла необходимость организовать взаимодействие класса документа с немодальным диалогом. Ранее этого не делал. (Обходился модальными)

Создаю и вызываю немодальное окно.
Код

CMyDialog *dlg;
.......
//Событие
if(!dlg)//Если окно не создано-создать
{
dlg=new CMyDialog;
dlg->Create(IDD_DIALOG1);
}
else//Если создано - сделать активным и показать
{
dlg->SetActiveWindow();
dlg->ShowWindow(SW_NORMAL);
}


Передавать данные в класс немодального окна у меня получается
Код

dlg->m_dialogstring=m_mainstring;
dlg->UpdateData(FALSE);


Обратно - из немодального окна в класс документа - не получается.
Не могу получить значение указателя на класс документа из класса диалога pDoc (типа как в CView GetDocument();)

передать указатель через конструктор класса-диалога (при создании диалога) пробовал, но после этих изменений не получается вызвать немодальное окно.
CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/, CMyDoc* pDoc).... и т.д.



Возможно есть способ для получения значения указателя на класс документа из любого произвольного класса для взаимодействия переменных этих классов.
П.С. Приложение SDI


З.Ы. Решил проблему. Все оказалось просто. Использовал  this;

Это сообщение отредактировал(а) Proletariy - 28.1.2009, 10:38
PM MAIL   Вверх
voov
Дата 28.1.2009, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Цитата(Proletariy @  27.1.2009,  20:13 Найти цитируемый пост)
Возможно есть способ для получения значения указателя на класс документа из любого произвольного класса для взаимодействия переменных этих классов.

общего способа нет. в CView GetDocument(); работает потому, что у вида есть указатель на документ (можешь посмотреть реализацию GetDocument()). 


Цитата(Proletariy @  27.1.2009,  20:13 Найти цитируемый пост)
передать указатель через конструктор класса-диалога (при создании диалога) пробовал, но после этих изменений не получается вызвать немодальное окно.
CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/, CMyDoc* pDoc)

а если поменять параметры местами? параметры, которые имеют значение поумолчанию, должны быть последними.
PM MAIL   Вверх
Proletariy
Дата 28.1.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



voov Спасибо за ответ.

Решил вопрос так (оказалось очень все просто, а я вчера в дебри конкретные залез)

В классе CMyDialog объявил CMyDoc *pDoc (public)
и при создании немодального диалога передал указатель на класс документа

Код

if(!dlg)//Если окно не создано-создать
{
dlg=new CMyDialog;
dlg->Create(IDD_DIALOG1);
dlg->pDoc=this;
}
else//Если создано - сделать активным и показать
{
dlg->SetActiveWindow();
dlg->ShowWindow(SW_NORMAL);
}


И из класса CMyDialog имею доступ к классу документа
Код

this->pDoc->m_mainstring=m_dialogstring;
this->pDoc->UpdateAllViews(NULL);

PM MAIL   Вверх
voov
Дата 28.1.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: 8
Всего: 8



Да, все правильно. Единственно, еще замечу, что лучше переменные-члены класса не делать публичными (я про pDoc->m_mainstring, dlg->pDoc). Лучше сделать их private или protected и сделать методы доступа get... и set...

Это сообщение отредактировал(а) voov - 28.1.2009, 12:35
PM MAIL   Вверх
Proletariy
Дата 28.1.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



voov
Спасибо. Учту. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.