Graphics::Restore, méthode (gdiplusgraphics.h)

La méthode Graphics::Restore définit l’état de cet objet Graphics à l’état stocké par un appel précédent à la méthode Graphics::Save de cet objet Graphics .

Syntaxe

Status Restore(
  [in] GraphicsState gstate
);

Paramètres

[in] gstate

Type : GraphicsState

Valeur 32 bits (retournée par un appel précédent à la méthode Graphics::Save de cet objet Graphics ) qui identifie un bloc d’état enregistré.

Valeur retournée

Type : État

Si la méthode réussit, elle retourne Ok, qui est un élément de l’énumération Status .

Si la méthode échoue, elle retourne l’un des autres éléments de l’énumération Status .

Notes

Lorsque vous appelez la méthode Graphics::Save d’un objet Graphics , un bloc d’informations qui contient 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 transmettez la valeur d’identification à la méthode 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 cet appel Graphics::Save est supprimé de la pile, et tous les blocs d’informations placés sur cette pile après cet 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 .

Note Lorsque vous appelez Graphics::Restore, tous les blocs d’informations placés sur la pile (par Graphics::Save ou par BeginContainer) après l’appel correspondant à Graphics::Save sont supprimés de la pile. De même, lorsque vous appelez EndContainer, tous les blocs d’informations placés sur la pile (par Graphics::Save ou par BeginContainer) après l’appel correspondant à BeginContainer sont supprimés de la pile.
 

Exemples

Les exemples suivants montrent deux façons d’utiliser la méthode Graphics::Restore . Le premier exemple montre comment restaurer des états enregistrés imbriqués, et le second 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 du monde 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, puis traduire, puis mettre à l’échelle. Le code utilise un stylet rouge pour dessiner une ellipse transformée par cette transformation composite.

Le code passe state2, qui a été retourné par le deuxième appel à Save, à 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 state1, qui a été retourné par le premier appel à Save, à la méthode Graphics::Restore et 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 du monde 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, puis traduire, puis mettre à l’échelle. Le code utilise un stylet rouge pour dessiner une ellipse transformée par cette transformation composite.

Le code passe state1, qui a été retourné par le premier appel à Save, à la méthode Graphics::Restore , puis 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é de la pile les blocs d’informations identifiés par state1 et state2 .

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 (include Gdiplus.h)
Bibliothèque Gdiplus.lib
DLL Gdiplus.dll

Voir aussi

Graphismes

Graphics::Save