Наверняка, вам когда-нибудь хотелось заменить стандартное оформление приложения Windows на что-то собственное. Например, как в лаунчерах современных игр:

Такое оформление не сложно создать самому (при наличии, конечно, навыков дизайнера). Для создания такого приложения будем использовать исключительно стандартные средства Windows Forms.

Фон

Для начала создадим фон. Для этого потребуется создать фоновое изображение – подложку для активных элементов формы. Это можно сделать в любой программе для редактирования изображения или попросить знакомого дизайнера сделать это за вас. Размер фонового изображения должен совпадать с размерами формы. Случай, если форма сможет менять свои размеры, мы рассмотрим позже. Если вы хотите использовать прозрачность, то сохраняйте изображение в формате png.

Для того, чтобы наше изображение появилось вместо стандартного серого оформления, мы переопределим событие Form.Paint:

PaintEventArgs передает необходимый нам для рисования Graphics. Получим его:

Изображение-фон должно быть загружено заранее и, желательно, сохранено отдельно тела события Paint:

Теперь нам достаточно нарисовать фоновое изображение в левом верхнем углу формы:

Все! Теперь при перерисовке формы, вместо стандартного серого фона, будет рисоваться наше изображение. Следует запомнить, что фоновое изображение может быть выполнено более сложным образом. Например, если следует добавить возможность изображение растягиваться или сжиматься, то следует использовать следующую конструкцию:

Изображений может быть несколько и можно добавить сюда какой-нибудь текст. Например, заголовок:

Кнопка

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

Для начала следует изучить когда активный элемент меняет свое состояние:

  • при наведении мышки кнопка должна перейти в состояние hover
  • при нажатии кнопки мыши, кнопка должна перейти в состояние clicked
  • после нажатия, кнопка должна снова перейти в состояние hover, если курсор все еще находится в пределах кнопки
  • после того, как курсор вышел за границы кнопки, она должна перейти в состояние normal

Для начала подготовим три изображения: нормальное, подсвеченное и нажатое. Хранить их можно как угодно: в виде трех файлов или в виде одного, но разбитого на 3 логических области. В принципе последний подход более практичен, будем использовать его. Загрузим это изображение в свойство Image нашей кнопки:

В свойстве Tag будем хранить текущее состояние кнопки:

Создадим события MouseEnter, которое срабатывает при заходе курсора мышки в границы формы, MouseLeave, которое срабатывает, когда курсор покидает границы кнопки, и MouseDown и MouseUp, которые срабатывают при нажатии кнопки мыши:

Теперь, когда в свойстве Tag хранится состояние кнопки, можно приступить к ее рисованию. Как вы могли уже догадаться, оно будет осуществляться через переопределение метода Paint:

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

Вот, как такое решение может выглядеть в реальном проекте: