Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > Minimize Box сворачивает всё |
Автор: mrgloom 2.9.2013, 16:50 | ||
Есть главное окно, потом открывается еще 1 окно в котором есть кнопка свёртывания, проставленная в свойствах Minimize Box. вызывается как
только при нажатии кнопки сворачивания почему то сворачивается вся программа, а хотелось бы чтобы сворачивался только открытый диалог. |
Автор: Albor 2.9.2013, 17:06 |
Зачем сворачивать модальный диалог? Всё равно, пока он не закрыт, с основным окном ни чего не сделать. Используйте не модальный режим. |
Автор: akizelokro 4.9.2013, 15:28 | ||
Оба утверждения спорны. Если запустить такую кострукцию как
а с модального окна убрать все элементы управления, кнопки, по которому оно закрывается и перекрыть закрытие модального окна по Escape, то сделать всё-таки что-то можно. Поведение программы в такой ситуации различается в XP и Windows7, но обработку поток делает спокойно. Единственное, что модальное окно, если на него повесить прогрессбар, в XP не будет отображать прогресс (Возможно, можно сделать это неким другим потоком). Но,предположу, чтов другие окна даже под XP Добраться можно из запущенного потока. Как сделать,чтобы основное окно не минимизировалось? Есдинственное, что могу предположить, - не отрисовывать для модального окна ничего на панели задач, а попутно, для пущей уверенности и в главном окне пробовать запретить (перехватить) минимизацию. Но это всё весёлые изыски.. потому я сеодня два хороших куса кода ночью забубенил. А потом ещё и PHP-скрипт начал писать на языке JavaScript и долго удивлялся, почему оно там не работает. ![]() |
Автор: Albor 4.9.2013, 15:48 |
Оспорить можно что угодно. Модальный диалог нужен для обязательного общения с пользователем. Так зачем же давать возможность этому пользователю себя сворачивать и давать доступ к основному окну без получения нужной реакции/информации для основной задачи? |
Автор: akizelokro 4.9.2013, 20:13 |
С этим вот как раз согласен. А попробовать тоже, возможно, стоит. Просто для ознакомления с "начинкой". |
Автор: mrgloom 5.9.2013, 10:20 | ||
попробовал не модальный диалог создать так.
работает нормально и минимизация тоже, только почему то при повторном запуске падает. |
Автор: akizelokro 5.9.2013, 13:32 |
Тебе написали в другой теме почему, это уже не проблема API. Ты пытаешься создать static-объект второй раз. А не позволяет тебе это делать сам язык программирования. Во второй раз не создавай его, а вызывай уже созданный до этого (тут надо обсмотреть ещё, что ты не "чикаешь" сам диалог при закрытии в первый раз до такой степени, что его уже не вызвать повторно, возможно ли такое, - надо смотреть и разбираться). Со static-диалогом работай лучше по-другому. Создавай при старте программы, когда тебе нужно его вызвать, делай активным (показывай), при закрытии (кнопка "ок", "отмена, Alt+F4 - убирай с глаз долой. Добавлено @ 13:38 Да и вообще посмотри создание немодальных диалоговых окон. |
Автор: mrgloom 5.9.2013, 15:33 | ||||
так ошибка происходит не когда подходит к определению static объекта второй раз, а на Create. я не понимаю что происходит там более подробно.
я просто закрываю диалог на Ok или Cancel и потом пытаюсь вызвать еще раз. смысл варианта с singleton(если он будет работать), что в главном диалоге не надо определять переменную для дочернего диалога. |
Автор: mrgloom 6.9.2013, 10:21 | ||||||||
Всё таки дело в Create такой код тоже падает.
вообще сделал так
|
Автор: mrgloom 17.9.2013, 16:58 | ||
создаю так диалог, но как то получается так что окна которые были созданы до остаются доступными, т.е. можно на них перейти и например закрыть, а надо чтобы было доступен только текущий диалог. В чем может быть причина? может быть в моём случае какие то проблемы с выставленными стилями окна? |
Автор: mrgloom 18.9.2013, 11:48 |
похоже проблема в том, что до открытия основного диалога я вызываю еще 1 модальный диалог в CMyDlg::OnInitDialog() и после открытия мой диалог почему то теряет модальность, если же открытие побочного диалога закомментить, то всё норм. |
Автор: mrgloom 19.9.2013, 09:24 | ||||
было
вообщем проблема решилась надо было так.
|