Создание приложения .NET, которое «пристыковывается» к краю экрана и ограничивает размеры других окон при максимизации - PullRequest
2 голосов
/ 14 декабря 2011

Я получил интересную просьбу от старших апов. Им нужно простое приложение, которое будет отображаться на компьютерах пользователей для отображения времени в нескольких часовых поясах. Это само по себе тривиально; простое окно с таймером, которое будет получать текущее время UTC и преобразовывать его в любое количество часовых поясов, которые они хотят видеть, чтобы обновить текст некоторых меток.

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

Итак, я думал о реализации этого одним из двух способов:

  • Как приложение, которое всегда находится сверху, но фон будет полностью прозрачным, а отображение времени будет прозрачным на 50% или чем-то подобным. Перемещение мыши по окну «выделит» отображение времени, удалив их прозрачность и / или добавив непрозрачный высококонтрастный фон. AFAIK это решение не может использовать Windows Aero, потому что ОС основных пользователей будет Windows XP.

  • Как приложение, которое использует низкоуровневые сообщения Windows для имитации поведения панели задач Windows в режиме «всегда сверху»; он будет пристыкован к верхней части экрана, всегда будет отображаться поверх окон с «нормальным» состоянием и, кроме того, будет регулировать поведение «максимизировать» других окон, чтобы эти окна не перекрывали его при развертывании.

Я действительно понятия не имею, с чего начать реализацию любого из них, но я рискну предположить, что, учитывая ограничение WinXP, второй вариант проще, если вообще возможно. Итак, какое поведение я бы хотел реализовать, чтобы Windows никогда не максимизировала свою форму?

1 Ответ

1 голос
/ 15 декабря 2011

В качестве эпитафии, поскольку Ханс Пассант, похоже, не хочет публиковать ответы, я обнаружил, что мне нужно было сделать приложение «Панелью инструментов рабочего стола приложения» или панелью приложений.Ссылка на CodePlex, которую дал Ханс, http://codeproject.com/KB/dotnet/AppBar.aspx,, а также статья MSDN по этой теме, http://msdn.microsoft.com/en-us/library/windows/desktop/cc144177%28v=vs.85%29.aspx,, дают много информации.Мне удалось в значительной степени скопировать / вставить область кода из CodePlex, определяющего поведение AppBar, в обычную форму .NET, чтобы создать простое подтверждение концепции:

enter image description here

Единственное изменение, которое я сделал в коде CodePlex, - отделить половину RegisterBar (), которая регистрирует форму как AppBar, от кода, который ее разрушает, поэтому вызов RegisterBar () всегда делает именно это, а не попеременно регистрируетсяи отменить его регистрацию.

...