Graphics::Save, méthode (gdiplusgraphics.h)
La méthode Graphics::Save enregistre l’état actuel (transformations, zone de découpage et paramètres de qualité) de cet objet Graphics . Vous pouvez restaurer l’état ultérieurement en appelant la méthode Graphics::Restore .
Syntaxe
GraphicsState Save();
Valeur de retour
Type : GraphicsState
Cette méthode retourne une valeur qui identifie l’état enregistré. Transmettez cette valeur à la méthode Graphics::Restore lorsque vous souhaitez restaurer l’état. Le type de données GraphicsState est défini dans Gdiplusenums.h.
Notes
Lorsque vous appelez la méthode Graphics::Save d’un objet Graphics , un bloc d’informations contenant l’état de l’objet Graphics est placé sur une pile. La méthode Graphics::Save retourne une valeur qui identifie ce bloc d’informations. Lorsque vous passez la valeur d’identification à la méthode Graphics::Restore , le bloc d’informations est supprimé de la pile et est utilisé pour restaurer l’objet Graphics à l’état dans lequel il se trouvait au moment de l’appel Graphics::Save . Notez que l’identificateur retourné par un appel donné à la méthode Graphics::Save ne peut être passé qu’une seule fois à la méthode Graphics::Restore .
Les appels à la méthode Graphics::Save peuvent être imbriqués ; autrement dit, vous pouvez appeler la méthode Graphics::Save plusieurs fois avant d’appeler la méthode Graphics::Restore . Chaque fois que vous appelez la méthode Graphics::Save , un bloc d’informations est placé sur la pile et vous recevez un identificateur pour le bloc d’informations. Lorsque vous passez l’un de ces identificateurs à la méthode Graphics::Restore , l’objet Graphics est retourné à l’état dans lequel il se trouvait au moment de l’appel Graphics::Save qui a retourné cet identificateur particulier. Le bloc d’informations placé sur la pile par lequel Graphics::Save call est supprimé de la pile, et tous les blocs d’informations placés sur cette pile après l’appel Graphics::Save sont également supprimés.
Les appels à la méthode BeginContainer placent des blocs d’informations sur la même pile que les appels à la méthode Graphics::Save . Tout comme un appel Graphics::Restore est associé à un appel Graphics::Save , un appel EndContainer est associé à un appel BeginContainer .
Exemples
Les exemples suivants illustrent deux façons d’utiliser la méthode Graphics::Save . Le premier exemple montre comment restaurer des états enregistrés imbriqués, et le deuxième montre comment restaurer uniquement le premier des deux états enregistrés imbriqués.
Restauration des états enregistrés imbriqués
L’exemple suivant définit la transformation mondiale d’un objet Graphics sur une rotation, puis enregistre l’état de l’objet Graphics . Ensuite, le code appelle TranslateTransform et enregistre à nouveau l’état. Ensuite, le code appelle ScaleTransform. À ce stade, la transformation mondiale de l’objet Graphics est une transformation composite : d’abord faire pivoter, traduire, puis mettre à l’échelle. Le code utilise un stylet rouge pour dessiner une ellipse transformée par cette transformation composite.
Le code passe l’état2, qui a été retourné par le deuxième appel à Enregistrer, à la méthode Graphics::Restore , et dessine à nouveau l’ellipse à l’aide d’un stylet vert. L’ellipse verte est pivotée et traduite, mais pas mise à l’échelle. Enfin, le code passe l’état1, qui a été retourné par le premier appel à Enregistrer, à la méthode Graphics::Restore , puis dessine à nouveau l’ellipse à l’aide d’un stylet bleu. L’ellipse bleue est pivotée, mais pas traduite ou mise à l’échelle.
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);
}
Restauration uniquement du premier des deux états enregistrés imbriqués
L’exemple suivant définit la transformation mondiale d’un objet Graphics sur une rotation, puis enregistre l’état de l’objet Graphics . Ensuite, le code appelle TranslateTransform et enregistre à nouveau l’état. Ensuite, le code appelle ScaleTransform. À ce stade, la transformation mondiale de l’objet Graphics est une transformation composite : d’abord faire pivoter, traduire, puis mettre à l’échelle. Le code utilise un stylet rouge pour dessiner une ellipse transformée par cette transformation composite.
Le code transmet l’état1, qui a été retourné par le premier appel à Enregistrer, à la méthode Graphics::Restore , et dessine à nouveau l’ellipse à l’aide d’un stylet vert. L’ellipse verte est pivotée, mais pas traduite ou mise à l’échelle.
Ensuite, le code tente de restaurer l’état identifié par state2. La tentative échoue, car l’appel Restore(state1) a supprimé les blocs d’informations identifiés par state1 et state2 de la pile.
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);
}
Spécifications
Client minimal pris en charge | Windows XP, Windows 2000 Professionnel [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | gdiplusgraphics.h (inclure Gdiplus.h) |
Bibliothèque | Gdiplus.lib |
DLL | Gdiplus.dll |