Graphics::Save-Methode (gdiplusgraphics.h)

Die Graphics::Save-Methode speichert den aktuellen Zustand (Transformationen, Beschneidungsbereich und Qualitätseinstellungen) dieses Graphics-Objekts . Sie können den Zustand später wiederherstellen, indem Sie die Graphics::Restore-Methode aufrufen.

Syntax

GraphicsState Save();

Rückgabewert

Typ: GraphicsState

Diese Methode gibt einen Wert zurück, der den gespeicherten Zustand identifiziert. Übergeben Sie diesen Wert an die Graphics::Restore-Methode , wenn Sie den Zustand wiederherstellen möchten. Der GraphicsState-Datentyp ist in Gdiplusenums.h definiert.

Hinweise

Wenn Sie die Graphics::Save-Methode eines Graphics-Objekts aufrufen, wird ein Informationsblock, der den Zustand des Graphics-Objekts enthält, auf einem Stapel platziert. Die Graphics::Save-Methode gibt einen Wert zurück, der diesen Informationsblock identifiziert. Wenn Sie den identifizierenden Wert an die Graphics::Restore-Methode übergeben, wird der Informationsblock aus dem Stapel entfernt und verwendet, um das Graphics-Objekt in den Zustand wiederherzustellen, in dem es sich zum Zeitpunkt des Graphics::Save-Aufrufs befand. Beachten Sie, dass der von einem bestimmten Aufruf der Graphics::Save-Methode zurückgegebene Bezeichner nur einmal an die Graphics::Restore-Methode übergeben werden kann.

Aufrufe der Graphics::Save-Methode können geschachtelt werden. Das heißt, Sie können die Graphics::Save-Methode mehrmals aufrufen, bevor Sie die Graphics::Restore-Methode aufrufen. Jedes Mal, wenn Sie die Graphics::Save-Methode aufrufen, wird ein Informationsblock auf dem Stapel platziert, und Sie erhalten einen Bezeichner für den Informationsblock. Wenn Sie einen dieser Bezeichner an die Graphics::Restore-Methode übergeben, wird das Graphics-Objekt in den Zustand zurückgegeben, in dem es sich zum Zeitpunkt des Graphics::Save-Aufrufs befand, der diesen bestimmten Bezeichner zurückgegeben hat. Der Von diesem Graphics::Save-Aufruf auf dem Stapel platzierte Informationsblock wird aus dem Stapel entfernt, und alle Informationsblöcke, die nach diesem Graphics::Save-Aufruf auf diesem Stapel platziert werden, werden ebenfalls entfernt.

Aufrufe der BeginContainer-Methode platzieren Informationsblöcke auf demselben Stapel wie Aufrufe der Graphics::Save-Methode . Ebenso wie ein Graphics::Restore-Aufruf mit einem Graphics::Save-Aufruf gekoppelt ist, wird ein EndContainer-Aufruf mit einem BeginContainer-Aufruf gekoppelt.

Hinweis Wenn Sie Graphics::Restore aufrufen, werden alle Informationsblöcke, die nach dem entsprechenden Aufruf von Graphics::Save auf dem Stapel (von Graphics::Save oder von BeginContainer) platziert werden, aus dem Stapel entfernt. Ebenso werden beim Aufrufen von EndContainer alle Informationsblöcke, die auf dem Stapel (von Graphics::Save oder von BeginContainer) nach dem entsprechenden Aufruf von BeginContainer platziert werden, aus dem Stapel entfernt.
 

Beispiele

Die folgenden Beispiele zeigen zwei Möglichkeiten zur Verwendung der Graphics::Save-Methode . Das erste Beispiel zeigt, wie geschachtelte gespeicherte Zustände wiederhergestellt werden, und das zweite Beispiel zeigt, wie nur der erste von zwei geschachtelten gespeicherten Zuständen wiederhergestellt wird.

Wiederherstellen geschachtelter gespeicherter Zustände

Im folgenden Beispiel wird die Welttransformation eines Graphics-Objekts auf eine Drehung festgelegt und anschließend der Zustand des Graphics-Objekts gespeichert. Als Nächstes ruft der Code TranslateTransform auf und speichert den Zustand erneut. Anschließend ruft der Code ScaleTransform auf. An diesem Punkt ist die Welttransformation des Graphics-Objekts eine zusammengesetzte Transformation: zuerst rotieren, dann übersetzen und dann skalieren. Der Code verwendet einen roten Stift, um eine Ellipse zu zeichnen, die von dieser zusammengesetzten Transformation transformiert wird.

Der Code übergibt state2, der vom zweiten Aufruf von Save zurückgegeben wurde, an die Graphics::Restore-Methode und zeichnet die Ellipse erneut mit einem grünen Stift. Die grüne Ellipse wird gedreht und übersetzt, aber nicht skaliert. Schließlich übergibt der Code state1, der vom ersten Aufruf von Save zurückgegeben wurde, an die Graphics::Restore-Methode und zeichnet die Ellipse erneut mit einem blauen Stift. Die blaue Ellipse wird gedreht, aber nicht übersetzt oder skaliert.

VOID Example_Save1(HDC hdc)
{
   Graphics graphics(hdc);
   GraphicsState state1, state2;

   graphics.RotateTransform(30.0f);
   state1 = graphics.Save();
   graphics.TranslateTransform(100.0f, 0.0f, MatrixOrderAppend);
   state2 = graphics.Save();
   graphics.ScaleTransform(1.0f, 3.0f, MatrixOrderAppend);
   
   // Draw an ellipse. 
   // Three transformations apply: rotate, then translate, then scale.
   Pen redPen(Color(255, 255, 0, 0));
   graphics.DrawEllipse(&redPen, 0, 0, 100, 20);
 
   // Restore to state2 and draw the ellipse again. 
   // Two transformations apply: rotate then translate.
   graphics.Restore(state2);
   Pen greenPen(Color(255, 0, 255, 0));
   graphics.DrawEllipse(&greenPen, 0, 0, 100, 20);

   // Restore to state1 and draw the ellipse again. 
   // Only the rotation transformation applies.
   graphics.Restore(state1);
   Pen bluePen(Color(255, 0, 0, 255));
   graphics.DrawEllipse(&bluePen, 0, 0, 100, 20);
}

Wiederherstellen nur des ersten von zwei geschachtelten gespeicherten Status

Im folgenden Beispiel wird die Welttransformation eines Graphics-Objekts auf eine Drehung festgelegt und anschließend der Zustand des Graphics-Objekts gespeichert. Als Nächstes ruft der Code TranslateTransform auf und speichert den Zustand erneut. Anschließend ruft der Code ScaleTransform auf. An diesem Punkt ist die Welttransformation des Graphics-Objekts eine zusammengesetzte Transformation: zuerst rotieren, dann übersetzen und dann skalieren. Der Code verwendet einen roten Stift, um eine Ellipse zu zeichnen, die von dieser zusammengesetzten Transformation transformiert wird.

Der Code übergibt state1, der vom ersten Aufruf von Save zurückgegeben wurde, an die Graphics::Restore-Methode und zeichnet die Ellipse erneut mit einem grünen Stift. Die grüne Ellipse wird gedreht, aber nicht übersetzt oder skaliert.

Als Nächstes versucht der Code, den durch state2 identifizierten Zustand wiederherzustellen. Der Versuch schlägt fehl, da der Aufruf Restore(state1) die Informationsblöcke, die durch state1 und state2 identifiziert wurden, aus dem Stapel entfernt wurden.

VOID Example_Save2(HDC hdc)
{
   Graphics graphics(hdc);
   GraphicsState state1, state2;

   graphics.RotateTransform(30.0f);
   state1 = graphics.Save();
   graphics.TranslateTransform(100.0f, 0.0f, MatrixOrderAppend);
   state2 = graphics.Save();
   graphics.ScaleTransform(1.0f, 3.0f, MatrixOrderAppend);
   
   // Draw an ellipse. 
   // Three transformations apply: rotate, then translate, then scale.
   Pen redPen(Color(255, 255, 0, 0));
   graphics.DrawEllipse(&redPen, 0, 0, 100, 20);
 
   // Restore to state1 and draw the ellipse again. 
   // Only the rotation transformation applies.
   graphics.Restore(state1);
   Pen greenPen(Color(255, 0, 255, 0));
   graphics.DrawEllipse(&greenPen, 0, 0, 100, 20);

   // The information block identified by state2 has been lost.
   // The following call to Restore has no effect because
   // Restore(state1) removed from the stack the
   // information blocks identified by state1 and state2.
   graphics.Restore(state2);

   // The Graphics object is still in the state identified by state1.
   // The following code draws a blue ellipse on top of the previously
   // drawn green ellipse.
   Pen bluePen(Color(255, 0, 0, 255));
   graphics.DrawEllipse(&bluePen, 0, 0, 100, 20);
}

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP, Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile gdiplusgraphics.h (include Gdiplus.h)
Bibliothek Gdiplus.lib
DLL Gdiplus.dll

Weitere Informationen

Grafiken

Grafiken::Wiederherstellen