Форма C# в стиле Windows 7

Прикрепление в Windows 7

Одной из новых функций в последней версии Windows 7 является возможность приложений прикрепляться к разным частям экрана. Изменение формы Windows Forms в .NET для имитации поведения приложения Windows 7 не очень сложно.

Приложение C# в стиле Windows 7 будет работать в других версиях Windows. Для сохранения простоты оно не будет в точности таким же, как в Windows 7.

Прикрепление

Первая часть прикрепления формы в C# состоит в сборе данных, когда приложение прикреплено, а когда нет. В Windows 7 перетаскивание приложения к одной из четырех сторон экрана прикрепляет окно приложения к соответствующей стороне. В окне C# приложение будет прикрепляться при перетаскивании к левой, правой или верхней границе экрана.

Когда форма .NET прикрепляется, нам нужно "пришпилить" ее наверху, что облегчает его горизонтальное перетаскивание, когда все остальное прикреплено к сторонам экрана.

Наконец, первоначальный размер формы должен восстанавливаться, когда окно перетаскивается обратно в центр экрана, как в Windows 7.

Оконные сообщения

Поведение формы в стиле Windows 7 несложно (хотя предрасположено к ошибкам). Существует два способа добиться этого поведения, с помощью событий формы C# или путем обработки непосредственно сообщений формы.

События обеспечивают чистую реализацию, более согласованную с кодом .NET. Однако события активируются после обработки внутренних оконных сообщений. Итак, в нашем случае, если мы хотим настроить перемещение приложения, следует ожидать мерцания.

Чтобы избежать мерцания окна, следует обрабатывать оконные сообщения, переопределив WndProc в форме C#. Это дает нам возможность изменения поведения окна до его появления на экране. Таким образом окно будет работать без проблем.

Однако у переопределения WndProc есть обратная сторона — код становится менее ясным или по крайней мере перестает быть простым кодом .NET. Кроме того, он может привести к конфликтам с другими операциями, обрабатывающими оконные сообщения.

Форма Windows 7

Для наших целей форма .NET будет переопределять WndProc. Поведение аналогично поведению приложения в Windows 7, но не в точности то же. Я предлагаю читателям настроить код для достижения более точного стиля Windows 7 формы в .NET.