Доступ из модального окна
От: A.Ustas Беларусь  
Дата: 14.04.02 13:07
Оценка:
Как воспользоваться (грамматно) функциями (членами класса)
диалогового окна, вызвавшего модальное окно, из последнего ?
Re: Доступ из модального окна
От: mitq Россия  
Дата: 14.04.02 13:19
Оценка: 3 (1)
Здравствуйте A.Ustas, Вы писали:

A.U> Как воспользоваться (грамматно) функциями (членами класса)

A.U>диалогового окна, вызвавшего модальное окно, из последнего ?

Я в некотором затруднении:
если имеется ввиду модель типа
CMyModal * pModal;

CMyDlg::Func()
{
   int nRes = pModal->StartWork();
   // ...
}

то ответ очевиден:
CMyModal * pModal;

CMyDlg::Func()
{
   pModal->SetMyDlg( this ); // CMyModal::SetMyDlg( CMyDlg * pDlg ) { m_pMyDlg = pDlg; }
   int nRes = pModal->StartWork();
   // ...
}

CMyModal::StartWork()
{
   m_pMyDlg->DlgFunc();
   // ...
}

Понять же написаное как-то иначе я затрудняюсь.
Re: Доступ из модального окна
От: Dima2  
Дата: 14.04.02 16:10
Оценка:
Здравствуйте A.Ustas, Вы писали:

A.U> Как воспользоваться (грамматно) функциями (членами класса)

A.U>диалогового окна, вызвавшего модальное окно, из последнего ?

Да уж и вправду очень ты мудрено написал. У тебя диалоговое окно вызывает модальное окно, и из модального окна ты хочеш вызывать ф-ии диалогового ???
Re: Доступ из модального окна
От: Юнусов Булат Россия  
Дата: 14.04.02 16:54
Оценка:
Здравствуйте A.Ustas, Вы писали:

A.U> Как воспользоваться (грамматно) функциями (членами класса)

A.U>диалогового окна, вызвавшего модальное окно, из последнего ?
Ой а что такое модальное окно? Мне почему то кажется что диалог это, или я в рассеяности что то путаю
Re: Доступ из модального окна
От: Юнусов Булат Россия  
Дата: 14.04.02 17:09
Оценка:
Здравствуйте A.Ustas, Вы писали:

A.U> Как воспользоваться (грамматно) функциями (членами класса)

A.U>диалогового окна, вызвавшего модальное окно, из последнего ?
Видимо прописать в класс Б мембером указатель на класс А, инициализировать его при создании Б и вперед. Или трудности?
Re[2]: Доступ из модального окна
От: A.Ustas Беларусь  
Дата: 14.04.02 19:26
Оценка:
Здравствуйте Dima2, Вы писали:

D>Здравствуйте A.Ustas, Вы писали:


A.U>> Как воспользоваться (грамматно) функциями (членами класса)

A.U>>диалогового окна, вызвавшего модальное окно, из последнего ?

D>Да уж и вправду очень ты мудрено написал. У тебя диалоговое окно вызывает модальное окно, и из модального окна ты хочеш вызывать ф-ии диалогового ???



Да, ты правильно понял. Может просто унаследовать 2-е от 1-го и делов то...
Но, мне кажется, существует более изящное решение. Что посоветуешь ? Спасибо.
Re[2]: Доступ из модального окна
От: A.Ustas Беларусь  
Дата: 14.04.02 19:31
Оценка:
Здравствуйте Юнусов Булат, Вы писали:

ЮБ>Здравствуйте A.Ustas, Вы писали:


A.U>> Как воспользоваться (грамматно) функциями (членами класса)

A.U>>диалогового окна, вызвавшего модальное окно, из последнего ?
ЮБ>Видимо прописать в класс Б мембером указатель на класс А, инициализировать его при создании Б и вперед. Или трудности?
Re[3]: Доступ из модального окна
От: A.Ustas Беларусь  
Дата: 14.04.02 20:23
Оценка:
Здравствуйте A.Ustas, Вы писали:

A.U>Здравствуйте Юнусов Булат, Вы писали:


ЮБ>>Здравствуйте A.Ustas, Вы писали:


A.U>>> Как воспользоваться (грамматно) функциями (членами класса)

A.U>>>диалогового окна, вызвавшего модальное окно, из последнего ?
ЮБ>>Видимо прописать в класс Б мембером указатель на класс А, инициализировать его при создании Б и вперед. Или трудности?
A.U> Трудности есть (нет опыта). Я в принципе так и думал сделать. Неужели по другому никак нельзя?
А если так, то при инциализации указателя нужно получить hwnd окна класса А ? Или как?
Если не трудно, черкни примерчик? Спасибо...
Re: Доступ из модального окна
От: Dr_Sh0ck Беларусь  
Дата: 15.04.02 03:07
Оценка:
Здравствуйте A.Ustas, Вы писали:

A.U> Как воспользоваться (грамматно) функциями (членами класса)

A.U>диалогового окна, вызвавшего модальное окно, из последнего ?

Поздравляю с регистрацией
Do not fake yourself ;)
ICQ#: 198114726
Re[4]: Доступ из модального окна
От: Dima2  
Дата: 15.04.02 07:21
Оценка: 3 (1)
Здравствуйте A.Ustas, Вы писали:

Ну можно примерно так:

//CMyDialog* m_pMyDialog; в объявлении класса CMyModalDialog


CMyModalDialog::CMyModalDialog(CWnd* pParent = NULL);   // standard constructor
{
    ASSERT( pParent );
    m_pMyDialog = static_cast<CMyDialog*>( pParent );    //если уверен что pParent это CMyDialog
    //через эту переменную m_pMyDialog можеш вызывать ф-ии родителя pMyDialog->Func1();
}

//.....

void CMyDialog::ShowMyModal()
{
    //показать твой модальный диалог
    CMyModalDialog modalDlg( this );
    modalDlg.DoModal();
}
Re: Доступ из модального окна
От: The Lex Украина  
Дата: 15.04.02 18:49
Оценка:
Здравствуйте A.Ustas, Вы писали:

A.U> Как воспользоваться (грамматно) функциями (членами класса)

A.U>диалогового окна, вызвавшего модальное окно, из последнего ?

По-моему проще всего слать сообщения. Имею такой опыт, все работает на удивление красиво. Да и с точки зрения системы это "ровнее" будет.
Голь на выдумку хитра, однако...
Re[2]: Доступ из модального окна
От: Sasparella США  
Дата: 15.04.02 19:48
Оценка:
Здравствуйте The Lex, Вы писали:

TL>Здравствуйте A.Ustas, Вы писали:


A.U>> Как воспользоваться (грамматно) функциями (членами класса)

A.U>>диалогового окна, вызвавшего модальное окно, из последнего ?

TL>По-моему проще всего слать сообщения. Имею такой опыт, все работает на удивление красиво. Да и с точки зрения системы это "ровнее" будет.


А кому слать то? Все равно нэндл/указатель держать надо... Так уж тогда не грех и напрямую ф-ию вызвать — тем более что SendMessage все равно так и делает (ну, она правда еще и сихронизирует, но это непринципиально). Или я неправ?


Саша.
Re[3]: Доступ из модального окна
От: The Lex Украина  
Дата: 16.04.02 05:29
Оценка:
Здравствуйте Sasparella, Вы писали:

TL>>По-моему проще всего слать сообщения. Имею такой опыт, все работает на удивление красиво. Да и с точки зрения системы это "ровнее" будет.


S>А кому слать то? Все равно нэндл/указатель держать надо... Так уж тогда не грех и напрямую ф-ию вызвать — тем более что SendMessage все равно так и делает (ну, она правда еще и сихронизирует, но это непринципиально). Или я неправ?


В моем случае дело было так:

void COneDlg::OnNext() 
{
    CWnd* pParent = GetParent();
    if (pParent)
    {
        pParent->SendMessage(WM_COMMAND, ID_VIEW_NEXT, NULL);
    }
}


Это работает в варианте MDI — по нажатию кнопки в модальном диалоге выполняется команда меню приложения. Все работает слаженно и не надо задумываться ни над синхронизацией ни над специальными функциями. Хотя конечно же вполне возможно что это несколько частный вариант. Но я все же противник того, чтобы пользоваться объектом как попало.
Голь на выдумку хитра, однако...
Re[4]: Доступ из модального окна
От: Игорь Вартанов Ниоткуда  
Дата: 16.04.02 08:06
Оценка:
Здравствуйте The Lex, Вы писали:

TL>>>По-моему проще всего слать сообщения. Имею такой опыт, все работает на удивление красиво. Да и с точки зрения системы это "ровнее" будет.


Имхо, имеет место смешивание двух различных сущностей — объекта "окно" и объекта класса C++, привешенного к нему. Если вопрошавший хотел воспользоваться всего-лишь функциональностью объекта класса, то такая возможность реализуется весьма просто:

    CMyParentDlg* pDlg = (CMyParentDlg*)GetParent();
    pDlg->SomeMethod(...);


Но если изначально предполагалось, что под вызовом функции скрывается инициирование некоей реакции самого окна (ведущей в итоге к вызову метода(ов) класса C++ ), то тут возможны проблемы. И проблемы будут связаны с модальностью дочернего окна. Его модальность означает, что родительское окно до конца его существования задисэйблено, и, следовательно, не качает очередь сообщений. Т.е. вся функциональность, проистекающая от вызова DispatchMessage(), TranslateAccelerator() будет недоступна. В то же время прямой вызов WindowProc посредством SendMessage будет работать и в этом случае.

TL>Все работает слаженно и не надо задумываться ни над синхронизацией ни над специальными функциями. Хотя конечно же вполне возможно что это несколько частный вариант.


И вот именно по этой причине задумываться необходимо.

TL>Но я все же противник того, чтобы пользоваться объектом как попало.


No comments.
---
С уважением,
Игорь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.