Вопрос

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

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

Это было полезно?

Решение

От Закончить:

Чтобы ваш диалог оставался на высоте

Разве вы не видели программы, в которых есть опция "всегда оставаться на высоте"?Что ж невероятно то, что вы можете сделать так, чтобы ваш диалог оставался на высоте всего с помощью одной строки кода.Просто поместите следующую строку в функцию вашего диалогового класса 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 или выше.(Или, возможно, это я) Но создание немодального диалогового окна в виде всплывающего окна вместо дочернего решает эту проблему.Теперь он позиционируется в главном диалоговом окне, но вы можете написать код для ограничения в любом месте.Использование без границ или верхней панели делает его простым окном.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top