netlib.narod.ru< Назад | Оглавление | Далее >

Сохранение состояния объекта Graphics

Изменение значений свойств 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< Назад | Оглавление | Далее >

Сайт управляется системой uCoz