共用方式為


中繼檔 (GDI+)

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

GDI+ 可以顯示已以下列格式儲存的中繼檔:

  • WINDOWS 元檔案格式 (WMF)
  • 加強型中繼檔 (EMF)
  • EMF+

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

EMF+ 是 EMF 的延伸模組,可讓 GDI+ 記錄儲存。 EMF+ 格式有兩種變化:EMF+ 僅限和 EMF+ 雙重。 EMF+ 僅包含 GDI+ 記錄的中繼檔。 這類中繼檔可由 GDI+ 顯示,但無法由 Windows 圖形裝置介面 (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 類別是錄製 Metafile 物件中指示和設定的關鍵。 對 Graphics 物件方法所做的任何呼叫都可以記錄在 Metafile 物件中。 同樣地,您也可以設定 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 度旋轉。

視窗的螢幕擷取畫面,其中包含橢圓形填滿線條的橢圓形,其源自橢圓形的某個點