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

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

11 голосов
/ 27 февраля 2009

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

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

Ответы [ 2 ]

17 голосов
/ 27 февраля 2009

С Ниш :

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

Разве вы не видели программы, которые имеют вариант "всегда оставаться на вершине"? Что ж невероятно то, что вы можете сделать ваш диалог оставаться на вершине с просто одна строка кода. Проще говоря следующая строка в вашем диалоговом классе Функция 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);

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

-Adam

0 голосов
/ 19 июля 2018

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

...