Всегда впереди диалогов

Есть ли способ создать немодальное диалоговое окно в C++ MFC, которое всегда остается поверх других окон в приложении? Я думаю, что-то вроде диалогового окна "Найти" в Visual Studio 2005 - там, где оно находится сверху, но вы все равно можете редактировать основной текст.

(Если это имеет какое-то значение, это не MDI; это приложение на основе диалога)

3 ответа

Решение

Из Ниша:

Заставить ваш диалог оставаться на вершине

Разве вы не видели программы, в которых есть опция "всегда оставаться на вершине"? Что ж, невероятно то, что вы можете сделать так, чтобы ваш диалог оставался на вершине всего одной строкой кода. Просто поместите следующую строку в функцию OnInitDialog() вашего диалогового класса.

SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

По сути, мы используем функцию SetWindowPos для изменения Z-порядка нашего диалогового окна. Мы заставляем наш диалог оставаться поверх всех остальных окон, перемещая его в верхнюю часть Z-порядка. Теперь даже когда вы активируете какое-то другое окно, наше окно останется сверху. Но я бы посоветовал вам убедиться, что вы точно знаете, что делаете, когда делаете это, потому что это может раздражать людей, если они не могут убрать ваше окно с дороги, когда они этого хотят.

Как вы упомянули в комментариях, приведенная выше строка заставляет окно располагаться поверх каждого приложения. Вам нужно будет сделать

SetWindowPos(&this->wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

Чтобы окно сидело поверх только вашего приложения.

-Адам

Принятый ответ не для Windows 7 или выше. (Или, может быть, это я) Но решение проблемы делает создание немодального диалога всплывающим, а не дочерним. Теперь он позиционируется в главном диалоговом окне, но вы можете написать код для ограничения в любом месте. Использование без рамки или верхней панели делает это окно простым.

У меня это сработало в Microsoft Windows версии 10.0.18362.476. Пришлось поставить SetWindowPos(&this->wndTopMost, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE); в OnInitDialog и сделайте диалог как PopUp.

Другие вопросы по тегам