Graphics::Restore-Methode (gdiplusgraphics.h)
Die Graphics::Restore-Methode legt den Zustand dieses Graphics-Objekts auf den Zustand fest, den ein vorheriger Aufruf der Graphics::Save-Methode dieses Graphics-Objekts gespeichert hat.
Syntax
Status Restore(
[in] GraphicsState gstate
);
Parameter
[in] gstate
Typ: GraphicsState
32-Bit-Wert (zurückgegeben durch einen vorherigen Aufruf der Graphics::Save-Methode dieses Graphics-Objekts ), der einen Block mit gespeichertem Zustand identifiziert.
Rückgabewert
Typ: Status
Wenn die Methode erfolgreich ist, gibt sie OK zurück, ein Element der Status-Enumeration .
Wenn die Methode fehlschlägt, gibt sie eines der anderen Elemente der Status-Enumeration zurück.
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 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 Informationsblock, der von diesem Graphics::Save-Aufruf auf dem Stapel platziert wird, wird aus dem Stapel entfernt, und alle Informationsblöcke, die auf diesem Stapel nach diesem Graphics::Save-Aufruf platziert werden, werden ebenfalls entfernt.
Aufrufe der BeginContainer-Methode platzieren Informationsblöcke auf demselben Stapel wie Aufrufe der Graphics::Save-Methode . So wie ein Graphics::Restore-Aufruf mit einem Graphics::Save-Aufruf gekoppelt ist, wird ein EndContainer-Aufruf mit einem BeginContainer-Aufruf gekoppelt.
Beispiele
Die folgenden Beispiele zeigen zwei Möglichkeiten zur Verwendung der Graphics::Restore-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 dann 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, 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 durch den 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 durch den 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 Zuständen
Im folgenden Beispiel wird die Welttransformation eines Graphics-Objekts auf eine Drehung festgelegt und dann 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, 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 durch den 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, weil der Aufruf Restore(state1) die durch state1 und state2 identifizierten Informationsblöcke aus dem Stapel entfernt hat.
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 |