Método Graphics::Restore (gdiplusgraphics.h)
O método Graphics::Restore define o estado desse objeto Graphics como o estado armazenado por uma chamada anterior para o método Graphics::Save deste objeto Graphics .
Sintaxe
Status Restore(
[in] GraphicsState gstate
);
Parâmetros
[in] gstate
Tipo: GraphicsState
Valor de 32 bits (retornado por uma chamada anterior para o método Graphics::Save deste objeto Graphics ) que identifica um bloco de estado salvo.
Valor retornado
Tipo: Status
Se o método for bem-sucedido, ele retornará Ok, que é um elemento da enumeração Status .
Se o método falhar, ele retornará um dos outros elementos da enumeração Status .
Comentários
Quando você chama o método Graphics::Save de um objeto Graphics , um bloco de informações que contém o estado do objeto Graphics é colocado em uma pilha. O método Graphics::Save retorna um valor que identifica esse bloco de informações. Quando você passa o valor de identificação para o método Restore , o bloco de informações é removido da pilha e é usado para restaurar o objeto Graphics para o estado em que ele estava no momento da chamada Graphics::Save . Observe que o identificador retornado por uma determinada chamada para o método Graphics::Save pode ser passado apenas uma vez para o método Graphics::Restore .
As chamadas para o método Graphics::Save podem ser aninhadas; ou seja, você pode chamar o método Graphics::Save várias vezes antes de chamar o método Graphics::Restore . Sempre que você chama o método Graphics::Save , um bloco de informações é colocado na pilha e você recebe um identificador para o bloco de informações. Quando você passa um desses identificadores para o método Graphics::Restore , o objeto Graphics é retornado ao estado em que estava no momento da chamada Graphics::Save que retornou esse identificador específico. O bloco de informações colocado na pilha por essa chamada Graphics::Save é removido da pilha e todos os blocos de informações colocados nessa pilha depois dessa chamada Graphics::Save também são removidos.
As chamadas para o método BeginContainer colocam blocos de informações na mesma pilha que as chamadas para o método Graphics::Save . Assim como uma chamada Graphics::Restore é emparelhada com uma chamada Graphics::Save , uma chamada EndContainer é emparelhada com uma chamada BeginContainer .
Exemplos
Os exemplos a seguir mostram duas maneiras de usar o método Graphics::Restore . O primeiro exemplo mostra como restaurar estados salvos aninhados e o segundo exemplo mostra como restaurar apenas o primeiro de dois estados salvos aninhados.
Restaurando estados salvos aninhados
O exemplo a seguir define a transformação mundial de um objeto Graphics como uma rotação e salva o estado do objeto Graphics . Em seguida, o código chama TranslateTransform e salva o estado novamente. Em seguida, o código chama ScaleTransform. Nesse ponto, a transformação mundial do objeto Graphics é uma transformação composta: primeiro gire, depois traduza e, em seguida, dimensione. O código usa uma caneta vermelha para desenhar uma elipse transformada por essa transformação composta.
O código passa o estado2, que foi retornado pela segunda chamada para Salvar, para o método Graphics::Restore e desenha a elipse novamente usando uma caneta verde. A elipse verde é girada e convertida, mas não dimensionada. Por fim, o código passa state1, que foi retornado pela primeira chamada para Salvar, para o método Graphics::Restore e desenha a elipse novamente usando uma caneta azul. A elipse azul é girada, mas não convertida ou dimensionada.
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);
}
Restaurando apenas o primeiro de dois estados salvos aninhados
O exemplo a seguir define a transformação mundial de um objeto Graphics como uma rotação e salva o estado do objeto Graphics . Em seguida, o código chama TranslateTransform e salva o estado novamente. Em seguida, o código chama ScaleTransform. Nesse ponto, a transformação mundial do objeto Graphics é uma transformação composta: primeiro gire, depois traduza e, em seguida, dimensione. O código usa uma caneta vermelha para desenhar uma elipse transformada por essa transformação composta.
O código passa state1, que foi retornado pela primeira chamada para Salvar, para o método Graphics::Restore e desenha a elipse novamente usando uma caneta verde. A elipse verde é girada, mas não traduzida ou dimensionada.
Em seguida, o código tenta restaurar o estado identificado pelo estado2. A tentativa falha porque a chamada Restore(state1) removeu os blocos de informações identificados por state1 e state2 da pilha.
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 com suporte | Windows XP, Windows 2000 Professional [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows 2000 Server [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | gdiplusgraphics.h (inclua Gdiplus.h) |
Biblioteca | Gdiplus.lib |
DLL | Gdiplus.dll |