Книга: Программирование мобильных устройств на платформе .NET Compact Framework

Листинг 11.8. Подключение к функции Paint формы

Листинг 11.8. Подключение к функции Paint формы

'Кисти, которые мы хотим кэшировать, чтобы избавить себя от необходимости
'все время создавать их и уничтожать
Private m_brushBlue As System.Drawing.Brush
Private m_brushYellow As System.Drawing.Brush
'Ради интереса подсчитаем, сколько раз осуществлялся вызов
Private m_paintCount As Integer
'-----------------------------------------------------------------------------
'Мы перекрываем обработчики событий Paint наших базовых классов. Это означает,
'что каждый раз, когда форма вызывается для перерисовки самой себя, будет
'вызываться эта функция.
'-----------------------------------------------------------------------------
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
 'ВАЖНО: Вызвать базовый класс и дать ему возможность
 'выполнить всю необходимую работу по рисованию
 MyBase.OnPaint(e)
 'Увеличить на 1 значение счетчика вызовов
 m_paintCount = m_paintCount + 1
 '--------------------------------------------------------------------------
 'Важно:
 'Вместо того чтобы создавать объект Graphics, мы получаем его
 'на время данного вызова. Это означает, что освобождать память путем вызова
 'метода .Dispose() объекта - не наша забота
 '--------------------------------------------------------------------------
 Dim myGfx As System.Drawing.Graphics
 myGfx = e.Graphics
 '-------------------------------------------------------------------
 'Поскольку эту операцию рисования необходимо выполнить быстро,
 'кэшируем кисти, чтобы избавить себя от необходимости создавать их и
 'уничтожать при каждом вызове
 '-------------------------------------------------------------------
 If (m_brushBlue Is Nothing) Then
  m_brushBlue = New System.Drawing.SolidBrush( _
   System.Drawing.Color.Blue)
 End If
 If (m_brushYellow Is Nothing) Then
  m_brushYellow = New System.Drawing.SolidBrush( _
   System.Drawing.Color.Yellow)
 End If
 '-------------------
 'Выполнить рисование
 '-------------------
 myGfx.FillRectangle(m_brushBlue, 2, 2, 100, 100)
 myGfx.DrawString("PaintCount: " + CStr(m_paintCount), _
  Me.Font, m_brushYellow, 3, 3)
 'Выход: Объекты, для которых мы должны были бы вызывать метод
 '.Dispose(), отсутствуют.
End Sub

Оглавление книги

Оглавление статьи/книги

Генерация: 1.454. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз