Книга: Программирование мобильных устройств на платформе .NET Compact Framework
Листинг 11.8. Подключение к функции Paint формы
Листинг 11.8. Подключение к функции Paint формы
//Кисти, которые мы хотим кэшировать, чтобы избавить себя
//от необходимости все время создавать их и уничтожать
System.Drawing.Brush m_brushBlue;
System.Drawing.Brush m_brushYellow;
//Ради интереса подсчитаем, сколько раз осуществлялся вызов
int m_paintCount;
//-----------------------------------------------------------------------------
//Мы перекрываем обработчики событий Paint наших базовых классов. Это означает,
//что каждый раз, когда форма вызывается для перерисовки самой себя, будет
//вызываться эта функция.
//-----------------------------------------------------------------------------
protected override void OnPaint(PaintEventArgs e) {
//ВАЖНО: Вызвать базовый класс и дать ему возможность
//выполнить всю необходимую работу по рисованию
base.OnPaint(e);
//Увеличить на 1 значение счетчика вызовов
m_paintCount = m_paintCount + 1;
//------------------------------------------------------------------------
//Важно:
//Вместо того чтобы создавать объект Graphics, мы получаем его на время
//данного вызова. Это означает, что освобождать память путем вызова
//метода .Dispose() объекта - не наша забота
//------------------------------------------------------------------------
System.Drawing.Graphics myGfx;
myGfx = e.Graphics;
//-------------------------------------------------------------------
//Поскольку эту операцию рисования необходимо выполнить быстро,
//кэшируем кисти, чтобы избавить себя от необходимости создавать их и
//уничтожать при каждом вызове
//-------------------------------------------------------------------
if (m_brushBlue == null) {
m_brushBlue = new System.Drawing.SolidBrush(System.Drawing.Color.Blue);
}
if (m_brushYellow == null) {
m_brushYellow = new System.Drawing.SolidBrush(System.Drawing.Color.Yellow);
}
//-------------------
//Выполнить рисование
//-------------------
myGfx.FillRectangle(m_brushBlue, 2, 2, 100, 100);
myGfx.DrawString("PaintCount: " + m_paintCount.ToString(), this.Font, mbrushYellow, 3, 3);
//Выход: Объекты, для которых мы должны были бы вызывать метод
//.Dispose(), отсутствуют.
}
- Отображение растровых изображений в элементе управления PictureBox
- Листинг 11.6. Создание изображения на внеэкранной растровой поверхности и передача его в элемент управления PictureBox
- Рисование непосредственно в форме
- Листинг 11.7. Создание объекта Graphics для формы
- Листинг 11.8. Подключение к функции Paint формы
- Обработчики событий или перекрытые функции?
- Реализация пользовательских элементов управления
- Листинг 11.9. Простой пользовательский элемент управления, который изменяет цвета и запускает событие, определяемое пользователем
- Листинг 11.10. Код, который должен быть помещен в форму для создания экземпляра пользовательского элемента управления
- Обработчики событий или перекрытые функции?
- Листинг 11.7. Создание объекта Graphics для формы
- Сеансы Paint
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Аргументы функции в Python
- Глава 5 Агрессивные формы кода и борьба с ними
- 3. Функции
- Новые функции API для работы с Blob и массивами
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Математические функции
- Размытые функции
- 2.5. Активная и пассивная формы интеллектуальной деятельности