| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Немодальное окно |
| Автор: Xedin 19.4.2007, 14:58 | ||
У меня есть диалоговое приложение. Из него по нажатию кнопки вызывается немодальный диалог:
Всё открывается всё отлично но если я жмякаю по родительскому....оно отображается под созданным...как зделать чтоб оно вылазило на первый план?? |
| Автор: dizzy1984 19.4.2007, 18:12 |
| У немодального диалога может стоять WS_EX_TOPMOST, которое заставляет его быть верхним для окон без этого флага. Это ты можешь проверить с помощью spy++. |
| Автор: Xedin 20.4.2007, 00:11 |
| Отлично классно...как же я не догадался...осталось тока выяснить что такое spy++... Насчёт флага....там такой не стоит вообще ни где... |
| Автор: dizzy1984 20.4.2007, 05:30 |
| tools->spy++ Если ты этот флаг не ставил руками, скорее всего его не будет. Прикрепи исходники программы и скажи на чем она была написана. |
| Автор: Xedin 20.4.2007, 11:36 |
| Написана на Visual C++ 6.0. На основе обычного диалогового приложения с использованием MFC. Создали понатыркали кнопок эдитов и т.д. И вот мне нужно чтоб по нажатию на одну из кнопок вызывалось немодальное диалоговое окно. Как это будет происходить мне по любому...я делал это как показано в примере выше....просто мне нужно чтобы я мог переходить с главного окна на дочернее и обратно....и чтоб они не перекрывали друг друга...а у меня получается что переходить могу, но главное под дочерним и надо его вытаскивать. Флагов в ручную ни каких не ставил. |
| Автор: dizzy1984 20.4.2007, 18:45 | ||||||
| Вобщем интересный вопрос получился. Ваша проблема в том, что MFC создает немодальное окно как потомок основного окна программы. Когда происходит отрисовка основного окна оно отрисовывает и все дочерние, а, т.к, у вас дочернее немодальное окно может частично перекрывать основное, то получается что оно как бы на заднем плане, хоть и активно. В MFC нет способа сделать так как вы хотите. Нужно расширить функционал класса CDialog и заставить по-другому работать метод Create, в частности чтобы он не тревожился по поводу отсутствия окна-родителя для создаваемого немодального окна. Вот такая реализация метода CreateNoParent сделает "безродное" немодальное окно, что вам и нужно. Добавьте этот прототип и определение к классу отнаследованному от CDialog и наследуйте от него все ваши классы немодальных окон, либо, если у вас только 1-н такой класс, добавьть прототип и определение непосредственно к нему.
реализация использует
так что он должен быть виден ею.
|
| Автор: Прохожий 24.4.2007, 11:23 | ||
dlg.Create(IDD_DIALOG1,GetDesktopWindow()); И всё будет ок |