![]() |
|
|
![]()
|
|
| MoreHate |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Возникло несколько вопросов по немодальным диалогам
1. Главное окно создает модальный диалог(1). Этот модальный диалог, в свою очередь, создает немодальный диалог(2). При закрытии немодального диалога, диалог модальный диалог (1) становится немодальным. Как этого избежать? 2. Тоже самое главное окно создает тот же модальный диалог, который создает немодальный. Из немодального диалога пытаюсь послать сообщение модальному, но ничего не получается. GetParent() выдает NULL. Поэтому GetParent()->SendMessage не работает. Или GetParent() только для модальных диалогов? Как в таком случае поступить? P.S. Немод. диалог создаю так:
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Идея создать внутри кода модального диалога - неудачная: модальный диалог запускает свой собственный цикл обработки сообщений.
GetParent - для всех, но ты создаешь диалог с parent = NULL, чего ж ты хочешь? Не делай так: т.е. немодальные диалоги лучше создавать в главном окне. -------------------- ... |
|||
|
||||
| MoreHate |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Хм...
В таком случае еще один вопрос. Модальный диалог (1) создает еще один модальный диалог(2). Можно ли в таком случае как-то воздействовать из второго диалога на первый (мне нужно попросту обновлять окно). Или нужно перестраивать струткуру программы? |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
Не рекомендуется. Обычно родитель влияет на потомка, а не наоборот -------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Можно, при создании второго диалога сделай его родителем первый.
Но как-то криво все выглядит. Ты бы объяснил, какая задача.
В данном случае это не очень реально: HWND дочернего модального диалога родитель стандартно не получит (оно живет только внутри модального цикла). Можно, конечно, извращаться. Вот наоборот как раз можно. -------------------- ... |
|||
|
||||
| MoreHate |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Если совсем упростить, то все выглядит так: Есть модальный диалог со списком товаров (корзина). Есть еще один диалог, который добавляет товары в эту самую корзину. Но нужно после каждого добавления обновить данные в корзине, чтобы было видно, что уже добавили, а что еще нет. |
|||
|
||||
| DeadSoul |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1217 Регистрация: 25.9.2005 Где: Москва Репутация: 2 Всего: 11 |
Примерно так:
-------------------- Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". Бьем спамеров их же оружием. Пусть весь спам сыпется им [email protected] |
|||
|
||||
| MoreHate |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Нет, не то...
Второй диалог никто не закрывает. Т.е. обновить нужно до закрытия. Это сообщение отредактировал(а) MoreHate - 21.6.2006, 02:58 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ну попробуй при объявляении второго модального диалога дать задать ему родителя - первый диалог (второй параметр в конструкторе). А потом посылать сообщения.
Но я бы все же сделала 2 немодальные формы... Причем данные хранила бы в отдельном классе, не интерфейсном, а обновления делала, например, на idle, по изменению данных. -------------------- ... |
|||
|
||||
| MoreHate |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Earnest
Данные хранятся в БД. Хотя это, конечно, не очень правильно. В будущем подумаю, как сделать нормально. А сейчас попробую сделать то, что ты посоветовала. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Да какая разница. Тем более, если собираешься в будущем переделывать, сделай промежуточный класс - прокладку между БД и UI, так чтобы UI про базу данных вообще не знал. Самый простой метод синхронизации - с помощью тайм-стэмпов, если нужно, покажу примерный код. -------------------- ... |
|||
|
||||
| MoreHate |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Да, если можно. Это будет очень полезно.
|
|||
|
||||
| MoreHate |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Делаю так:
Но в открывшемся диалоге GetParent() выдает NULL. Пробовал так:
То же самое. |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Покажи конструктор CMyDialog. Ты базовому-то классу родителя передаешь?
Вот примерный код синхронизиции по тайм-стампам:
Объект данных наследуешь от CStampHolder, в каждом методе setXXX() вызываешь Modified(). В окно добавляешь объект CStamTracker. На Idle проверяешь EnsureSync. Немодальному окну приходит сообщение WM_IDLEUPDATECMDUI, модальному - WM_KICKIDLE. Правда, работает ли это в дилоговом приложении - без понятия. -------------------- ... |
|||
|
||||
| MoreHate |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Наверное я что-то делаю не так
Коструктор у меня дефолтовый
Здесь что-то разве должно быть? В принципе указатель есть. Уже можно решить проблему... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |