Método Graphics::Restore (gdiplusgraphics.h)
El método Graphics::Restore establece el estado de este objeto Graphics en el estado almacenado por una llamada anterior al método Graphics::Save de este objeto Graphics .
Sintaxis
Status Restore(
[in] GraphicsState gstate
);
Parámetros
[in] gstate
Tipo: GraphicsState
Valor de 32 bits (devuelto por una llamada anterior al método Graphics::Save de este objeto Graphics ) que identifica un bloque de estado guardado.
Valor devuelto
Tipo: Estado
Si el método se realiza correctamente, devuelve Ok, que es un elemento de la enumeración Status .
Si se produce un error en el método, devuelve uno de los otros elementos de la enumeración Status .
Comentarios
Cuando se llama al método Graphics::Save de un objeto Graphics , se coloca un bloque de información que contiene el estado del objeto Graphics en una pila. El método Graphics::Save devuelve un valor que identifica ese bloque de información. Cuando se pasa el valor de identificación al método Restore , el bloque de información se quita de la pila y se usa para restaurar el objeto Graphics al estado en el que estaba en el momento de la llamada Graphics::Save . Tenga en cuenta que el identificador devuelto por una llamada determinada al método Graphics::Save solo se puede pasar una vez al método Graphics::Restore .
Las llamadas al método Graphics::Save se pueden anidar; es decir, puede llamar al método Graphics::Save varias veces antes de llamar al método Graphics::Restore . Cada vez que se llama al método Graphics::Save , se coloca un bloque de información en la pila y se recibe un identificador para el bloque de información. Cuando se pasa uno de esos identificadores al método Graphics::Restore , el objeto Graphics se devuelve al estado en el que estaba en el momento de la llamada Graphics::Save que devolvió ese identificador determinado. El bloque de información colocado en la pila por esa llamada Graphics::Save se quita de la pila y también se quitan todos los bloques de información colocados en esa pila después de esa llamada Graphics::Save .
Las llamadas al método BeginContainer colocan bloques de información en la misma pila que las llamadas al método Graphics::Save . Al igual que una llamada Graphics::Restore se empareja con una llamada Graphics::Save , una llamada a EndContainer se empareja con una llamada BeginContainer .
Ejemplos
En los ejemplos siguientes se muestran dos maneras de usar el método Graphics::Restore . En el primer ejemplo se muestra cómo restaurar los estados guardados anidados y el segundo ejemplo muestra cómo restaurar solo el primero de dos estados guardados anidados.
Restaurar estados guardados anidados
En el ejemplo siguiente se establece la transformación mundial de un objeto Graphics en una rotación y, a continuación, se guarda el estado del objeto Graphics . A continuación, el código llama a TranslateTransform y vuelve a guardar el estado. A continuación, el código llama a ScaleTransform. En ese momento, la transformación mundial del objeto Graphics es una transformación compuesta: primero gira, luego traduce y, a continuación, escala. El código usa un lápiz rojo para dibujar una elipse transformada por esa transformación compuesta.
El código pasa el estado 2, devuelto por la segunda llamada a Save, al método Graphics::Restore y vuelve a dibujar la elipse con un lápiz verde. La elipse verde se gira y se traduce, pero no se escala. Por último, el código pasa state1, devuelto por la primera llamada a Save, al método Graphics::Restore y vuelve a dibujar la elipse con un lápiz azul. La elipse azul se gira pero no se traduce ni se escala.
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);
}
Restaurar solo el primero de dos estados guardados anidados
En el ejemplo siguiente se establece la transformación mundial de un objeto Graphics en una rotación y, a continuación, se guarda el estado del objeto Graphics . A continuación, el código llama a TranslateTransform y vuelve a guardar el estado. A continuación, el código llama a ScaleTransform. En ese momento, la transformación mundial del objeto Graphics es una transformación compuesta: primero gira, luego traduce y, a continuación, escala. El código usa un lápiz rojo para dibujar una elipse transformada por esa transformación compuesta.
El código pasa state1, devuelto por la primera llamada a Save, al método Graphics::Restore y vuelve a dibujar la elipse con un lápiz verde. La elipse verde se gira pero no se traduce ni se escala.
A continuación, el código intenta restaurar el estado identificado por state2. Se produce un error en el intento porque la llamada a Restore(state1) quitó los bloques de información identificados por state1 y state2 de la pila.
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);
}
Requisitos
Cliente mínimo compatible | Windows XP, Windows 2000 Professional [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows 2000 Server [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | gdiplusgraphics.h (include Gdiplus.h) |
Library | Gdiplus.lib |
Archivo DLL | Gdiplus.dll |