Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: родитель модального диалога  (Прочитано 19332 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 05-09-2007 09:58 » 

пусть некий модальный диалог CDialog D1 является членом класса X (некое окно) .  Соответственно, передать параметры в конструктор диалога вот так сразу нельзя

class X : ...
{
   CDialog D1;
};

Если X - это не главное окно, то при открытии диалога
D1.DoModal();

родителем считается главное окно, что не есть хорошо... Как переопределить родителя в модальном диалоге ?

это не катит
D1.SetParent(...) ,
поскольку хендл диалога не создан ещё.

Или единственное решение - членом класса X сделать указатель на диалог, а объект класса диалога создать в конструкторе X через new ?
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 05-09-2007 12:20 » 

Хмм...  а зачем? Какая разница, кто у модального диалога родитель? Всё-равно доступ ко всем блокируется.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 05-09-2007 12:50 » 

Джон, ни-фи-га.. Если создать диалог класса Z через Create, то Z не будет блокироваться. То есть, открыто главное окно. Открываем Z. Открываем модальное. Главное - блокируется, а Z - свободное
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 05-09-2007 13:22 » 

Если создать диалог класса Z через Create, то Z не будет блокироваться.

А это уже НЕ модальный диалог, и родитель должен следить за его уничтожением.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 05-09-2007 16:20 » 

Джон, это я понимаю. Оно всё так и есть. Просто кроме всего этого, есть ещё и модальный диалог. Который должен блокировать не главное окно (как в случае вызова пустого конструктора) , а то окно, в котором вызывается

и вот как бы динамически указывать родителя ?
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 06-09-2007 08:54 » 

А теперь понял, надо покумекать.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 07-09-2007 16:01 » 

эхъ
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 12-12-2008 14:05 » 

Лёш, я тут у себя закладку нашёл на эту тему. Чем всё кончилось? Если актуально, то делай маленький проектик с нужной структурой вложенных окон-диалогов как она тебе видится.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 12-12-2008 19:49 » 

структура диалогов, кто кого в себе содержит:
Код:
главное окно
  |
  дочерний диалог
     |
     модальный диалог

а всё оказалось зарыто в другом месте:

виновато не то, где объявлен модальный диалог в дочернем (то есть как мембер или локально в обработчике кнопки) а то, где создано (Create) дочернее окно .

1) Если дочернее создать в OnInitDialog , то хендл главного окна уже существует и он туда втюхивается. Соответственно, дочернее знает, что родитель у него - главное окно. Дочернее - всегда поверх родителя, модальные ведёт себя как надо (аттач 1)

2) Если дочернее создать в конструкторе главного, то хендл главного окна ещё== 0. Для дочернего нет родителя. Дочернее не всегда поверх главного окна. Если в дочернем открыть модальное, то модальное блокирует лишь главное окно. (аттач 2) И поменять его через SetParent почему то не выходит - зависает наглухо программа...

* ModalInClass_1.exe (20 Кб - загружено 801 раз.)
* ModalInClass_2.exe (20 Кб - загружено 732 раз.)
* ModalInClass.rar (26.1 Кб - загружено 734 раз.)
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 12-12-2008 21:23 » 

А SetOwner не пробовал?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 12-12-2008 21:45 » 

SetOwner программу не вешает, но эффекта не наблюдаю
Записан

АлексейК
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 17-12-2008 14:02 » 


А почему вы не хотите вызывать дочернее окно через DoModal() в обработчике OnButton1()?

* ModalInClass.rar (31.62 Кб - загружено 766 раз.)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 17-12-2008 14:42 » 

АлексейК, знамо дело, почему Улыбаюсь ChildDialog - не модальный, но плавающий. В этом вся хитрость
Записан

АлексейК
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 17-12-2008 15:25 » 


Ну тогда, в функцию OnButton1() впишите

m_ChildDialog.Create(m_ChildDialog.IDD,this);
m_ChildDialog.ShowWindow(SW_SHOW);

А в функцию CCHILDDIALOG::OnClose() (это обработчик закрытия окна CCHILDDIALOG) впишите

DestroyWindow();

* ModalInClass.rar (32.16 Кб - загружено 752 раз.)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 17-12-2008 15:45 » 

АлексейК, ты что ли никогда не пользовался плавающими инструментами ? Улыбаюсь Мне окно нужнО с момента запуска программы. Да и не в этом вопрос был вообще, я уже написал, в чём косяк был )
Записан

АлексейК
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 17-12-2008 20:48 » 


Для того, чтобы окно появлялось с момента запуска программы надо вписать

m_ChildDialog.Create(m_ChildDialog.IDD,this);
m_ChildDialog.ShowWindow(SW_SHOW);

в функцию CMAINDIALOG::OnInitDialog()
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #16 : 17-12-2008 20:54 » 

АлексейК, ты читать умеешь ? ) Пост #8 , проблемы нету уже.
Записан

АлексейК
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 17-12-2008 20:59 » 

АлексейК, ты читать умеешь ? ) Пост #8 , проблемы нету уже.

Не вижу. А где это написано?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #18 : 17-12-2008 21:05 » 

тогда забей Улыбаюсь)

и вообще тема полторагодичной давности
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines