Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« : 05-09-2007 09:58 » |
|
пусть некий модальный диалог CDialog D1 является членом класса X (некое окно) . Соответственно, передать параметры в конструктор диалога вот так сразу нельзя
class X : ... { CDialog D1; };
Если X - это не главное окно, то при открытии диалога D1.DoModal();
родителем считается главное окно, что не есть хорошо... Как переопределить родителя в модальном диалоге ?
это не катит D1.SetParent(...) , поскольку хендл диалога не создан ещё.
Или единственное решение - членом класса X сделать указатель на диалог, а объект класса диалога создать в конструкторе X через new ?
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 05-09-2007 12:50 » |
|
Джон, ни-фи-га.. Если создать диалог класса Z через Create, то Z не будет блокироваться. То есть, открыто главное окно. Открываем Z. Открываем модальное. Главное - блокируется, а Z - свободное
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 05-09-2007 16:20 » |
|
Джон, это я понимаю. Оно всё так и есть. Просто кроме всего этого, есть ещё и модальный диалог. Который должен блокировать не главное окно (как в случае вызова пустого конструктора) , а то окно, в котором вызывается
и вот как бы динамически указывать родителя ?
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #6 : 07-09-2007 16:01 » |
|
эхъ
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 12-12-2008 19:49 » |
|
структура диалогов, кто кого в себе содержит: главное окно | дочерний диалог | модальный диалог
а всё оказалось зарыто в другом месте: виновато не то, где объявлен модальный диалог в дочернем (то есть как мембер или локально в обработчике кнопки) а то, где создано (Create) дочернее окно . 1) Если дочернее создать в OnInitDialog , то хендл главного окна уже существует и он туда втюхивается. Соответственно, дочернее знает, что родитель у него - главное окно. Дочернее - всегда поверх родителя, модальные ведёт себя как надо (аттач 1) 2) Если дочернее создать в конструкторе главного, то хендл главного окна ещё== 0. Для дочернего нет родителя. Дочернее не всегда поверх главного окна. Если в дочернем открыть модальное, то модальное блокирует лишь главное окно. (аттач 2) И поменять его через SetParent почему то не выходит - зависает наглухо программа...
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 12-12-2008 21:45 » |
|
SetOwner программу не вешает, но эффекта не наблюдаю
|
|
|
Записан
|
|
|
|
АлексейК
|
|
« Ответ #11 : 17-12-2008 14:02 » |
|
А почему вы не хотите вызывать дочернее окно через DoModal() в обработчике OnButton1()?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 17-12-2008 14:42 » |
|
АлексейК, знамо дело, почему ChildDialog - не модальный, но плавающий. В этом вся хитрость
|
|
|
Записан
|
|
|
|
АлексейК
|
|
« Ответ #13 : 17-12-2008 15:25 » |
|
Ну тогда, в функцию OnButton1() впишите
m_ChildDialog.Create(m_ChildDialog.IDD,this); m_ChildDialog.ShowWindow(SW_SHOW);
А в функцию CCHILDDIALOG::OnClose() (это обработчик закрытия окна CCHILDDIALOG) впишите
DestroyWindow();
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #14 : 17-12-2008 15:45 » |
|
АлексейК, ты что ли никогда не пользовался плавающими инструментами ? Мне окно нужнО с момента запуска программы. Да и не в этом вопрос был вообще, я уже написал, в чём косяк был )
|
|
|
Записан
|
|
|
|
АлексейК
|
|
« Ответ #15 : 17-12-2008 20:48 » |
|
Для того, чтобы окно появлялось с момента запуска программы надо вписать
m_ChildDialog.Create(m_ChildDialog.IDD,this); m_ChildDialog.ShowWindow(SW_SHOW);
в функцию CMAINDIALOG::OnInitDialog()
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #16 : 17-12-2008 20:54 » |
|
АлексейК, ты читать умеешь ? ) Пост #8 , проблемы нету уже.
|
|
|
Записан
|
|
|
|
АлексейК
|
|
« Ответ #17 : 17-12-2008 20:59 » |
|
АлексейК, ты читать умеешь ? ) Пост #8 , проблемы нету уже.
Не вижу. А где это написано?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #18 : 17-12-2008 21:05 » |
|
тогда забей ) и вообще тема полторагодичной давности
|
|
|
Записан
|
|
|
|
|