Обратиться из одного дилога к другому. HELP...
От: napalum  
Дата: 12.01.05 06:49
Оценка:
Уже несколько дней бюсь как, к примеру, обратиться из главной формы к элементу другой формы...и все лажа одна какая-то получается...

Вообще нужно из модуля(.h) обратиться к дереву находящегося на форме...(1ая постановка для простоты описана)

Весчь простейшая...а я не знаю как делать

HELP PLZzzzz!!!
Re: Обратиться из одного дилога к другому. HELP...
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 12.01.05 06:52
Оценка:
Здравствуйте, napalum, Вы писали:

N>Вообще нужно из модуля(.h) обратиться к дереву находящегося на форме...(1ая постановка для простоты описана)


Можно кусочек кода посмотреть? Что есть модуль и что есть форма?
[ posted via RSDN@Home 1.1.4 beta 3 r275 ]
- Искренне ваш, Поросенок Пафнутий
Re[2]: Обратиться из одного дилога к другому. HELP...
От: napalum  
Дата: 12.01.05 06:55
Оценка:
SDB>Можно кусочек кода посмотреть? Что есть модуль и что есть форма?

Да просто если стандартный проект создать с двумя диалоговами окнами...и надо как то из одого окна обратиться к другому... пусть даже do.Modal сделать второму окну из основного...
Re[3]: Обратиться из одного дилога к другому. HELP...
От: Anpek  
Дата: 12.01.05 06:58
Оценка:
Здравствуйте, napalum, Вы писали:


SDB>>Можно кусочек кода посмотреть? Что есть модуль и что есть форма?


N>Да просто если стандартный проект создать с двумя диалоговами окнами...и надо как то из одого окна обратиться к другому... пусть даже do.Modal сделать второму окну из основного...


Ну например посетить в один диалог указатель на другой перед вызовом DoModal. Или сразу на указатель контрол
Re[4]: Обратиться из одного дилога к другому. HELP...
От: napalum  
Дата: 12.01.05 07:03
Оценка:
По скорости не форум, а чат какой-то )

A>Ну например посетить в один диалог указатель на другой перед вызовом DoModal. Или сразу на указатель контрол


а можно написать какие строчки и в какую часть кода добавлять? или даже исходник лучше всего если есть у кого...
Re[4]: Обратиться из одного дилога к другому. HELP...
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 12.01.05 07:07
Оценка:
Здравствуйте, Anpek, Вы писали:

A>Ну например посетить в один диалог указатель на другой перед вызовом DoModal.


Совершенно справделиво.

class CFirstDialog: public CDialog { ... };
...
class CSecondDialog: public CDalog
{
public:
    CSecondDiaog(CFirstDialog* pFirstDlg, UINT uResID, CWnd* pParentWnd = NULL);
...
    CFirstDialog* m_pFirstDlg;
};
...
CSecondDiaog(CFirstDialog* pFirstDlg, UINT uResID, CWnd* pParentWnd):
CDialog(uResID, pParentWnd),
m_pFirstDlg(pFirstDlg)
{
...
}

Далее в любом из методов CSecondDialog можно будет обращаться к элементам управления первого диалога при мопощи вызовов вида

m_pFirstDlg->GetDlgItem(...)


A>Или сразу на указатель контрол


Можно и так, но если контролов, к которым нужно обращаться, будет много...
[ posted via RSDN@Home 1.1.4 beta 3 r275 ]
- Искренне ваш, Поросенок Пафнутий
Re[5]: Обратиться из одного дилога к другому. HELP...
От: Anpek  
Дата: 12.01.05 07:10
Оценка:
Здравствуйте, napalum, Вы писали:


Под рукой кода нет, но я это делал 256 раз.

Ну пусть диалог в котором исходный контрол — объект класса CoolDlg. В нем есть объект класса CoolCtrl. Делаешь в CoolDlg метод CoolCtrl* GetCoolControl();

Дальше. Пусть второй дилог — объект класса SecondDlg. Объявляешь в этом классе приватное поле CoolDlg* m_cool_dlg (не забудь занулить в конструкторе). И паблик метод SetCoolDlg(CoolDlg*), в котором сетишь это m_cool_dlg. А потом юзай в диалоге m_cool_dlg->GetCoolControl.

Ну и не забудь перед вызовом SecondDlg.DoModal вызвать SetCoolDlg
Re[6]: Обратиться из одного дилога к другому. HELP...
От: napalum  
Дата: 12.01.05 07:25
Оценка:
мда...так сразу мне не разобрать то что Вы мне написали...надо головку поломать чуток...
все-таки не отказался бы от иходника...

может тогда на примере...
вот создал чистое приложение,и дописал

---------------------------------
del13Dlg.h:
дописал: #include "About.h"
class Cdel13Dlg : public CDialog
{
// Construction
public:
Cdel13Dlg(CWnd* pParent = NULL); // standard constructor
дописал:CAbout m_dlg;
---------------------------------
del13Dlg.cpp:
void Cdel13Dlg::OnBnClickedOk()
{
дописал: m_dlg.DoModal;
}


Модальное оно не всплывает...m_dlg ссылается на нулевой хендл...(вообщем то, то что это все не работает логично Ж) )
так что еще надо дописать чтоб работало?
Re[7]: Обратиться из одного дилога к другому. HELP...
От: Anpek  
Дата: 12.01.05 07:32
Оценка:
Здравствуйте, napalum, Вы писали:

Ну вы, батенька, даете.
Голова-то на то и дана, чтобы ею думать.
Ну напишу я куда какую строчку сунуть — и тольку? Работа программы — не цель, когда не знаешь базовых вещей

Я расписал достаточно подробно, что и где надо сделать.
Re[7]: Обратиться из одного дилога к другому. HELP...
От: visual_wind  
Дата: 12.01.05 07:51
Оценка:
Здравствуйте, napalum, Вы писали:

N>мда...так сразу мне не разобрать то что Вы мне написали...надо головку поломать чуток...

N>все-таки не отказался бы от иходника...

N>может тогда на примере...

N>вот создал чистое приложение,и дописал

N>---------------------------------

N>del13Dlg.h:
N>дописал: #include "About.h"
N>class Cdel13Dlg : public CDialog
N>{
N>// Construction
N>public:
N> Cdel13Dlg(CWnd* pParent = NULL); // standard constructor
N>дописал:CAbout m_dlg;
N>---------------------------------
N>del13Dlg.cpp:
N>void Cdel13Dlg::OnBnClickedOk()
N>{
N>дописал: m_dlg.DoModal;
N>}


N>Модальное оно не всплывает...m_dlg ссылается на нулевой хендл...(вообщем то, то что это все не работает логично Ж) )

N>так что еще надо дописать чтоб работало?

1. Послушайте совета SchweinDeBurgа, и попробуйте сделать, как он сказал. Получить доступ к ЭЛЕМЕНТАМ УПРАВЛЕНИЯ МОДАЛЬНОГО диалога достаточно затруднительно из места, где создался модальный диалог. Лучше сделать наоборот, из модального диалога доступаться в то место, откуда создан модальный диалог. То место — это CFirstDialog в примере SchweinDeBurgа ( Cdel13Dlg в Вашем случае ). А CSecondDialog Вам надо будет создать самому и добавить в него конструктор
CSecondDiaog(CFirstDialog* pFirstDlg, UINT uResID, CWnd* pParentWnd = NULL);

в котором передается указатель но то самое место.
SchweinDeBurg описал Вам все, что нужно добавить в Ваш второй диалог, чтобы он заработал.

2. В принципе, учитывая, что у Вас dialog-based приложение, Вы можете всегда доступиться к окну главного (первого) диалога через AfxGetMainWnd() и сделать повышающее преобразование типа, однако способ SchweinDeBurgа чище.
Re[8]: Обратиться из одного дилога к другому. HELP...
От: napalum  
Дата: 12.01.05 09:05
Оценка:
_>2. В принципе, учитывая, что у Вас dialog-based приложение, Вы можете всегда доступиться к окну главного (первого) диалога через AfxGetMainWnd() и сделать повышающее преобразование типа

Спасибо )
это то что мне надо на данной стадии моей проги...

хотя я бы был не против что бы, к примеру, переменная компонента дерва была бы доступна из любого модуля...
Re[9]: Обратиться из одного дилога к другому. HELP...
От: visual_wind  
Дата: 12.01.05 09:27
Оценка:
Здравствуйте, napalum, Вы писали:


_>>2. В принципе, учитывая, что у Вас dialog-based приложение, Вы можете всегда доступиться к окну главного (первого) диалога через AfxGetMainWnd() и сделать повышающее преобразование типа


N>Спасибо )

N>это то что мне надо на данной стадии моей проги...

N>хотя я бы был не против что бы, к примеру, переменная компонента дерва была бы доступна из любого модуля...


Понимаете, Ваше решение не является общепринятым, поэтому его не так легко правильно реализовать.
Сложность в том, что Вы хотите доступаться к элементу управления модального диалога во время работы функции DoModal. При этом Вам, по-видимому, требуется производить какие-то действия с внутренней реализацией триконтрола во время его отображения.
Практичнее поступить следующим образом:
1. Отнаследоваться от триконтрола и внести все эти действия в класс-наследник.
2. Создавать триконтрол во втором диалоге либо в редакторе ресурсов с последующими Atatch/Detach либо динамически.
3. Создать во-втором диалоге открытые переменные для результатов работы триконтрола. В эти переменные будет происходить запись состояния триконтрола при нажатии кнопки OK на втором диалоге (эту запись необходимо сделать Вам в SecondDialog вручную). Эти переменные будут доступны во втором диалоге после вызова функции DoModal, и Вы сможете к ним легко доступиться из первого диалога.
Re: Обратиться из одного дилога к другому. HELP...
От: Imbecile Россия  
Дата: 12.01.05 14:30
Оценка:
Здравствуйте, napalum, Вы писали:

N>Уже несколько дней бюсь как, к примеру, обратиться из главной формы к элементу другой формы...и все лажа одна какая-то получается...


N>Вообще нужно из модуля(.h) обратиться к дереву находящегося на форме...(1ая постановка для простоты описана)


Э-э-э, насколько я понял из темы, тебе надо GetWindow(),
или там указатель на один диалог передавать другому,
а из вопроса, что надо GetDlgItem()?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.