Grafik::Simpan metode (gdiplusgraphics.h)

Metode Grafis::Simpan menyimpan status saat ini (transformasi, wilayah kliping, dan pengaturan kualitas) objek Grafis ini. Anda dapat memulihkan status nanti dengan memanggil metode Graphics::Restore .

Sintaks

GraphicsState Save();

Mengembalikan nilai

Jenis: GraphicsState

Metode ini mengembalikan nilai yang mengidentifikasi status tersimpan. Teruskan nilai ini ke metode Grafis::Pulihkan saat Anda ingin memulihkan status. Jenis data GraphicsState ditentukan dalam Gdiplusenums.h.

Keterangan

Saat Anda memanggil metode Grafis::Simpan objek Grafis , blok informasi yang menyimpan status objek Grafis diletakkan pada tumpukan. Metode Graphics::Save mengembalikan nilai yang mengidentifikasi blok informasi tersebut. Saat Anda meneruskan nilai identifikasi ke metode Grafis::Pulihkan , blok informasi dihapus dari tumpukan dan digunakan untuk memulihkan objek Grafis ke status yang ada pada saat panggilan Grafis::Simpan . Perhatikan bahwa pengidentifikasi yang dikembalikan oleh panggilan tertentu ke metode Graphics::Save hanya dapat diteruskan sekali ke metode Graphics::Restore .

Panggilan ke metode Grafis::Simpan dapat ditumpuk; artinya, Anda dapat memanggil metode Graphics::Save beberapa kali sebelum Anda memanggil metode Graphics::Restore . Setiap kali Anda memanggil metode Graphics::Save , blok informasi diletakkan di tumpukan, dan Anda menerima pengidentifikasi untuk blok informasi. Saat Anda meneruskan salah satu pengidentifikasi tersebut ke metode Grafis::Pulihkan , objek Grafik dikembalikan ke status yang ada pada saat panggilan Grafis::Simpan yang mengembalikan pengidentifikasi tertentu. Blok informasi yang ditempatkan pada tumpukan oleh panggilan Grafis::Simpan dihapus dari tumpukan, dan semua blok informasi yang ditempatkan pada tumpukan tersebut setelah itu Grafis::Simpan panggilan juga dihapus.

Panggilan ke metode BeginContainer menempatkan blok informasi pada tumpukan yang sama dengan panggilan ke metode Graphics::Save . Sama seperti panggilan Grafis::Pulihkan dipasangkan dengan panggilan Grafis::Simpan , panggilan EndContainer dipasangkan dengan panggilan BeginContainer .

Catatan Saat Anda memanggil Grafis::Pulihkan, semua blok informasi yang ditempatkan pada tumpukan (oleh Grafis::Simpan atau oleh BeginContainer) setelah panggilan yang sesuai ke Grafis::Simpan dihapus dari tumpukan. Demikian juga, Ketika Anda memanggil EndContainer, semua blok informasi yang ditempatkan pada tumpukan (oleh Grafis::Simpan atau oleh BeginContainer) setelah panggilan yang sesuai ke BeginContainer dihapus dari tumpukan.
 

Contoh

Contoh berikut menunjukkan dua cara untuk menggunakan metode Graphics::Save . Contoh pertama menunjukkan cara memulihkan status tersimpan berlapis, dan contoh kedua menunjukkan cara memulihkan hanya yang pertama dari dua status tersimpan berlapis.

Memulihkan Status Tersimpan Berlapis

Contoh berikut mengatur transformasi dunia objek Grafis ke rotasi lalu menyimpan status objek Grafis . Selanjutnya, kode memanggil TranslateTransform, dan menyimpan status lagi. Kemudian kode memanggil ScaleTransform. Pada titik itu, transformasi dunia objek Grafis adalah transformasi komposit: putar pertama, lalu terjemahkan, lalu skalakan. Kode menggunakan pena merah untuk menggambar elips yang diubah oleh transformasi komposit tersebut.

Kode melewati state2, yang dikembalikan oleh panggilan kedua ke Simpan, ke metode Graphics::Restore , dan menggambar elips lagi menggunakan pena hijau. Elips hijau diputar dan diterjemahkan tetapi tidak diskalakan. Akhirnya kode melewati state1, yang dikembalikan oleh panggilan pertama ke Simpan, ke metode Graphics::Restore , dan menggambar elips lagi menggunakan pena biru. Elips biru diputar tetapi tidak diterjemahkan atau diskalakan.

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);
}

Memulihkan Hanya Yang Pertama dari Dua Status Tersimpan Berlapis

Contoh berikut mengatur transformasi dunia objek Grafis ke rotasi lalu menyimpan status objek Grafis . Selanjutnya, kode memanggil TranslateTransform, dan menyimpan status lagi. Kemudian kode memanggil ScaleTransform. Pada titik itu, transformasi dunia objek Grafis adalah transformasi komposit: putar pertama, lalu terjemahkan, lalu skalakan. Kode menggunakan pena merah untuk menggambar elips yang diubah oleh transformasi komposit tersebut.

Kode melewati state1, yang dikembalikan oleh panggilan pertama ke Simpan, ke metode Graphics::Restore , dan menggambar elips lagi menggunakan pena hijau. Elips hijau diputar tetapi tidak diterjemahkan atau diskalakan.

Selanjutnya kode mencoba memulihkan status yang diidentifikasi oleh state2. Upaya gagal karena panggilan Pulihkan(state1) menghapus blok informasi yang diidentifikasi oleh state1 dan state2 dari tumpukan.

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);
}

Persyaratan

   
Klien minimum yang didukung Windows XP, Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header gdiplusgraphics.h (termasuk Gdiplus.h)
Pustaka Gdiplus.lib
DLL Gdiplus.dll

Lihat juga

Grafik

Grafik::Pulihkan