共用方式為


元檔 (GDI+)

Windows GDI+ 提供 Metafile 類別,讓您可以記錄及顯示元檔。 元檔也稱為向量影像,是儲存為繪圖命令和設定序列的影像。 元檔 物件中記錄的命令和設定可以儲存在記憶體中,或儲存至檔案或數據流。

GDI+ 可以顯示已以下欄格式儲存的元檔:

  • Windows 元檔格式 (WMF)
  • 增強型元檔 (EMF)
  • EMF+

GDI+ 可以記錄 EMF 和 EMF+ 格式的元檔,但不能以 WMF 格式錄製。

EMF+ 是 EMF 的延伸模組,允許儲存 GDI+ 記錄。 EMF+ 格式有兩種變化:EMF+ Only 和 EMF+ Dual。 EMF+ 僅限元檔只包含 GDI+ 記錄。 這類元檔可由 GDI+ 顯示,但不能由 Windows Graphics Device Interface (GDI) 顯示。 EMF+ 雙重元檔包含 GDI+ 和 GDI 記錄。 EMF+ 雙重元檔中的每個 GDI+ 記錄都會與替代的 GDI 記錄配對。 這類元檔可以透過 GDI+ 或 GDI 來顯示。

下列範例會在磁碟檔案中記錄一個設定和一個繪圖命令。 請注意,此範例會建立 Graphics 物件,而 Graphics 物件的建構函式會接收 Metafile 物件的位址做為自變數。

myMetafile = new Metafile(L"MyDiskFile.emf", hdc);
myGraphics = new Graphics(myMetafile);
   myPen = new Pen(Color(255, 0, 0, 200));
   myGraphics->SetSmoothingMode(SmoothingModeAntiAlias);
   myGraphics->DrawLine(myPen, 0, 0, 60, 40);
delete myGraphics;
delete myPen;
delete myMetafile;

如上述範例所示,Graphics 類別是錄製 元檔 物件中指示和設定的關鍵。 對 Graphics 物件之方法所做的任何呼叫,都可以記錄在 元檔 物件中。 同樣地,您可以設定 Graphics 物件的任何屬性,並將該設定記錄在 Metafile 物件中。 錄製會在刪除或超出範圍時,Graphics 對象結束。

下列範例會顯示在上述範例中建立的元檔。 元檔會以其左上角的 (100, 100) 顯示。

Graphics myGraphics(hdc);
Image myImage(L"MyDiskFile.emf");
myGraphics.DrawImage(&myImage, 100, 100);

下列範例會在 Metafile 物件中記錄數個屬性設定(裁剪區域、世界轉換和平滑模式)。 然後程式代碼會記錄數個繪圖指示。 指示和設定會儲存在磁碟檔案中。

myMetafile = new Metafile(L"MyDiskFile2.emf", hdc); 
myGraphics = new Graphics(myMetafile);
   myGraphics->SetSmoothingMode(SmoothingModeAntiAlias);
   myGraphics->RotateTransform(30);

   // Create an elliptical clipping region.
   GraphicsPath myPath;
   myPath.AddEllipse(0, 0, 200, 100);
   Region myRegion(&myPath);
   myGraphics->SetClip(&myRegion);

   Pen myPen(Color(255, 0, 0, 255));
   myGraphics->DrawPath(&myPen, &myPath);

   for(INT j = 0; j <= 300; j += 10)
   {
      myGraphics->DrawLine(&myPen, 0, 0, 300 - j, j);
   }
delete myGraphics;
delete myMetafile;

下列範例會顯示在上述範例中建立的元檔影像。

myGraphics = new Graphics(hdc);
myMetafile = new Metafile(L"MyDiskFile.emf");
myGraphics->DrawImage(myMetafile, 10, 10);

下圖顯示上述程式代碼的輸出。 請注意反鋸齒、橢圓裁剪區域和30度旋轉。

視窗的螢幕快照,其中包含填滿橢圓形的線條,其源自橢圓形