netlib.narod.ru | < Назад | Оглавление | Далее > |
Большинство функций рисования являются методами класса Graphics (кроме них есть еще функции класса ControlPaint, но они довольно специфичны). Для рисования нужен объект типа Graphics. Но конструктор Graphics не является открытым, поэтому просто создать объект Graphics, как это показано ниже, не получится:
Graphics grfx = new Graphics(); // He будет работать!
Кроме того, класс Graphics является изолированным (sealed), т.е. вы не можете создавать собственные классы, производные от Graphics:
class MyGraphics: Graphics // He будет работать!
Это делается иначе. Вот полный перечень способов получения объектов Graphics, начиная с самого распространенного.
При переопределении метода OnPaint или установке обработчика события Paint в любом классе, производном от Control (например, Form), вы получаете объект Graphics как свойство класса PaintEventArgs.
Для рисования на элементе управления или форме не только во время исполнения метода OnPaint или обработки события Paint, но и в другие моменты времени можно вызывать метод CreateGraphics этого элемента управления. Классы иногда вызывают метод CreateGraphics в своих конструкторах, чтобы получить нужные данные или выполнить инициализацию (как, скажем, это делали некоторые программы-примеры из главы 4). Хотя кое-какие классы не могут рисовать во время исполнения собственного конструктора, они могут делать это во время других событий. Для элемента управления или формы совершенно обычно рисовать что-то во время событий клавиатуры, мыши или таймера. Я еще продемонстрирую это в главах 6, 8 и 10. Важно, чтобы программа использовала объект Graphics только во время получающего его события (т.е. объект Graphics не должен храниться в поле класса). По завершении использования объекта Graphics программа также должна вызвать его метод Dispose.
Можно получить объект типа PrintPageEventArgs, который содержит подходящий для данного принтера объект Graphics, установив обработчик события PrintPage при печати. Ниже я покажу, как это сделать.
У некоторых элементов управления (меню, полей со списком, комбинированных полей и строк состояния) есть свойство OwnerDraw, позволяющее программе динамически рисовать на этом элементе управления. События MeasureItem и DrawItem предоставляют объекты типа MeasureItemEventArgs и DrawItemEventArgs, обладающие объектами Graphics, которые могут быть использованы обработчиком этого события;
Чтобы рисовать по битовой карте или метафайлу, надо получить специальный объект Graphics, вызвав статический метод Graphics.FromImage (соответствующие методики я продемонстрирую в главах 11 и 23).
Если нужно получить информацию из объекта Graphics, связанного с принтером, не распечатывая никаких данных, можно использовать метод CreateMeasurementGraphics класса PrinterSettings.
При взаимодействии с кодом Win32 получить объект Graphics позволяют статические методы Graphics.FromHwnd и Graphics.FromHdc.
netlib.narod.ru | < Назад | Оглавление | Далее > |