ПОНЯТНО О Visual Basic NET (том 3)

Форма-лодочка или «и нашим – и вашим»


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

Рис. 17.8

Вот весь код:

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

        Dim Гр As Graphics = Me.CreateGraphics

        Dim Путь As New Drawing2D.GraphicsPath

        Путь.AddEllipse(0, -300, Me.Width, 600)

        Me.Region = New Region(Путь)

End Sub

Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize

        Me.Invalidate()

End Sub

Пояснения: Сначала о тексте процедуры OnPaint. Все 4 ее строки привычны, надо только пояснить эллипс. Благодаря выбору чисел  -300 и 600 его центр лежит на заголовке окна. Как следствие, число 0 заставляет левый край эллипса лежать на левом краю заголовка, а выражение Me.Width – правый край на правом.

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

Теперь о процедуре OnPaint. Я мог бы воспользоваться привычной процедурой Form1_Load и все бы работало. Но при этом ширина эллипса оставалась бы неизменной, несмотря на изменения ширины окна. Лодочка теряла бы свои очертания. Я поставил задачу менять ширину эллипса в унисон с шириной окна. Обработчик события Paint здесь не помогает. Процедура OnPaint подходит, но она выполняется при наступлении события Paint и поэтому делает дело, когда форма увеличивается или возникает из-за других окон, а при уменьшении размеров окна не срабатывает. Поэтому я дополнил код обработчиком события Resize, которое возникает при любом изменении размеров окна. Метод Invalidate просто заставляет форму перерисоваться. Подробное описание механизма упомянутых процедур и метода не входит в задачи книги для начинающих.



Содержание раздела