Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 198

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 192 193 194 195 196 197 < 198 > 199 200 201 202 203 204 .. 404 >> Следующая


Класс Graphics

В классе Graphics инкапсулированы поверхности рисования GDI+. Есть три основных типа поверхностей рисования:

? Окна и управляющие элементы на экране

? Страницы, посылаемые на принтер

? Растровые изображения в памяти

В классе Graphics предусмотрены функции, которые позволяют рисовать на любой из этих поверхностей. Этот класс позволяет также рисовать дуги, кривые, кривые Безье (Bezier), эллипсы, рисунки, прямые, прямоугольники и текст.

Объект Graphics для некоторого окна можно получить двумя путями. Первый заключается в переопределении события OnPainto — виртуального метода, который класс Forme наследует от класса Control. В этом случае объект Graphics мы получаем из PaintEventArgs, который передается вместе с событием:

protected override void OnPaint (PaintEventArge e)

{

Graphics я = e.Graphicsi // Рисуем здесь

)

В некоторых ситуациях может потребоваться выполнять рисование в окне непосредственно, не дожидаясь наступления события onpainto. Это может оказаться актуальным в том случае, если мы создаем код, предназначенный для выбора в окне каких-либо графических объектов (аналогичный выбору иконок в Windows Explorer), либо переносим некий объект с помощью мышн. В этом случае доступ К объекту Graphics МОЖНО ПОЛуЧНТЬ, обращаясь К методу CreateGraphiceO данной формы, который представляет собой еще один метод, наследуемый классом Forms от класса control:
428

Глава 16

protected void FormljClicMobject sender, System.EventArgs e>

(

Graphics 0 - this.Great eGraphlea()j

// Рисуем здесь

flr.Dispose!); // Это важный момент

>

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

Существуют также и другие способы получения объекта Graphics, но к их рассмотрению мы вернемся несколько позже.

Удаление объектов

Всегда вызывайте метод DiapoaaO для графических объектов.

Каждому из нас знакомо поведение Windows в тех случаях, когда ресурсы оказываются исчерпанными. Система начинает работать очень медленно, при этом приложения зачастую рисуются неправильно. Грамотно организованные приложения должны освобождать используемые ими ресурсы сразу же, как только они становятся ненужными. При разработке с использованием .NET Framework существует несколько типов данных, для которых обращение к методу Diapoa«() оказывается очень важным, поскольку в противном случае определенные ресурсы никогда не будут освобождены. Этн классы реализуют интерфейс iDiapoaabla. Класс Qraphica является одним из таких классов.

Вызов метода DiapoaaO оказывается важным, однако, если мы получаем объект Qraphica ПОСреДСТВОМ обращения К методу CraateOraphica о .

Когда мы получаем объект orapbica от события OnPainto, то этот объект создается не нами, и, соответственно, ответственность за вызов метода DiaposeO также лежит не на нас, а в предшествующем примере эта ответственность возлагается именно на иас.

Вызов метода Dispose о выполняется автоматически в деструкторе различных классов, в которых реализуется интерфейс iDiaposable. Возможно, вы подумали, что это освобождает вас от ответственности за вызов метода Dispose)), однако это не так. Причина такого положения вещей заключается в том, что деструктор может быть вызван только сборщиком мусора (GC, garbage collector), а заранее никогда не известно, в какой момент GC будет запущен. В частности, на операционной системе Windows 9Х, использующей большие объемы памяти, GC может запускаться очень редко, и все ресурсы могут прекрасно использоваться до того, как GC будет запущен. Исчерпание памяти приводит к запуску GC, а пот исчерпание других ресурсов — нет. Система Windows 2000 оказывается гораздо менее чувствительной к исчерпанию ресурсов. В соответствии со спецификациями в Windows 2000 не существует каких-либо конкретных ограничений на эти типы ресурсов; автору, тем не менее, приходилось сталкиваться с ситуацией, когда эта операционная система начинала работать неправильно из-за большого количества открытых в ней приложений, при этом закрытие нескольких приложений приводило к быстрому восстановлению работоспособности системы. В любом случае, более правильным стилем программирования является удаление всех “жадных до ресурсов” объектов на регулярной основе.
Введение в GDJ+

429

В версии .NET Framework Beta предусмотрена новая конструкция, которая может использоваться для принудительного обращения к методу Dispose(). Конструкция using автоматически запускает метод DisposeO, как только происходит выход из области действия данного объекта. Следующий код представляет собой пример правильного использования ключевого слова uaing в этом контексте:

using (Graphics g = this.CreateGraphicsi))

(

g. DrawLine (Pens. BlacJc, new Point (0, 0), new Point<3, 5))t
Предыдущая << 1 .. 192 193 194 195 196 197 < 198 > 199 200 201 202 203 204 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.