Панель задач Auto-Hide не отображается, когда мое приложение развернуто

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


person Steve    schedule 26.09.2008    source источник


Ответы (2)


Я нашел проблему. Мое приложение обрабатывало сообщение WM_GETMINMAXINFO и переопределяло значения в записи параметра MINMAXINFO. Значения, которые были в записи, были увеличены на 7 (ширина границы) разрешения экрана в пикселях. Это имеет смысл в том, что при максимизации он выдвигает границы окна за пределы видимой части экрана. Он также устанавливает ptMaxPosition (точка, на которую устанавливается начало окна при максимизации) на -7, -7. Мое приложение устанавливало это значение на 0,0, а максимальная высота и ширина точно соответствовали размеру разрешения экрана (не завышенному). Не уверен, почему это было сделано; это было написано предшественником. Если я закомментирую этот код и не изменю структуру MINMAXINFO, сработает автоматическое скрытие.

Почему, я не совсем уверен. Возможно, обнаружение появления "автоскрытой" панели задач связано с механизмом обработки сообщений WM_MOUSEMOVE, а не с WM_NCMOUSEMOVE. С моим приложением, заставляющим максимизировать мою границу прямо в нижней части экрана, я бы генерировал события WM_NCMOUSEMOVE; оставив MINMAXINFO в покое, я бы генерировал WM_MOUSEMOVE.

person Steve    schedule 26.09.2008
comment
Я столкнулся с той же проблемой. Я обнаружил, что Ex-стиль панели задач изменен, и WS_EX_TOPMOST удаляется, когда окно развернуто. Одно из возможных решений: изменить базовый класс CFrameWndEx обратно на CFrameWnd (если вы не используете ленту или другие расширенные функции). - person guan boshen; 14.06.2018

Это зависит от того, установлен ли флажок «Держать панель задач поверх других окон» в свойствах панели задач. Если он отмечен, появится панель задач.

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

person Kev    schedule 26.09.2008