netlib.narod.ru | < Назад | Оглавление | Далее > |
Изменение значений свойств PageUnit и PageScale объекта Graphics существенно влияет на вид выводимой графики. Иногда значение этих или других свойств объекта Graphics меняют на время, чтобы нарисовать несколько фигур или получить какие-то данные, после чего возникнет необходимость вернуться к исходным значениям свойств.
У класса Graphics есть два метода, Save и Restore, которые служат именно этой цели: сохраняют свойства объекта Graphics и восстанавливают их впоследствии. Эти методы используют класс GraphicsState, определяемый в пространстве имен System.Drawng.Drawing2D.
Методы Graphics (выборочно)
GraphicsState Save() |
void Restore(GraphicsState gs) |
У класса GraphicsState нет открытых атрибутов, представляющих хоть какой-нибудь интерес, — это просто черный ящик! При вызове
GraphicsState gs = grfx.Save();
текущие значения всех изменяемых свойств объекта Graphics сохраняются в объекте GraphicsState, после чего можно изменять свойства объекта Graphics. Для восстановления сохраненных свойств служит вызов
grfx.Restore(gs);
Программисты с опытом использования Win32, вероятно, привыкли думать о подобных механизмах (к которым относятся функции SaveDC и RestoreDC) как о стеке магазинного типа (который работает по принципу «последним пришел — первым ушел»). Но в Windows Forms они реализованы более гибко. Например, можно начать обработку OnPaint с сохранения трех состояний объекта Graphics:
GraphicsState gs1 = grfx.Save(); ... // Изменение некоторых свойств ... GraphicsState gs2 = grfx.Save(); ... // Изменение некоторых свойств ... GraphicsState gs3 = grfx.Save();
После этого сохраненные данные о состоянии можно задействовать в любое время и в любом порядке, вызывая метод Restore.
Аналогичный механизм предоставляют методы BeginContainer и EndContainer класса Graphics, использующие класс GraphicsContainer из пространства имен System.Drawing.Drawing2D.
netlib.narod.ru | < Назад | Оглавление | Далее > |