共用方式為


圖形物件的狀態

Graphics類別是 Windows GDI+的核心。 若要繪製任何專案,您可以建立Graphics物件、設定其屬性,以及呼叫其方法, ( DrawLine、DrawImageDrawString等) 。

下列範例會建構Graphics物件和Pen物件,然後呼叫Graphics物件的Graphics::D rawRectangle方法:

HDC          hdc;
PAINTSTRUCT  ps;

hdc = BeginPaint(hWnd, &ps);
{
   Graphics graphics(hdc);
   Pen pen(Color(255, 0, 0, 255));  // opaque blue
   graphics.DrawRectangle(&pen, 10, 10, 200, 100);
}
EndPaint(hWnd, &ps);

在上述程式碼中, BeginPaint 方法會傳回裝置內容的控制碼,且該控制碼會傳遞至 Graphics 建構函式 。 裝置內容是由 Windows) 維護的結構 (,可保存所使用之特定顯示裝置的相關資訊。

圖形狀態

Graphics物件不只是提供繪圖方法,例如DrawLineDrawRectangleGraphics物件也會維護圖形狀態,這可以分成下列類別:

  • 裝置內容的連結
  • 品質設定
  • 轉換
  • 裁剪區域

裝置內容

身為應用程式程式設計人員,您不需要考慮 Graphics 物件與其裝置內容之間的互動。 此互動是由 GDI+ 在幕後處理。

品質設定

Graphics物件有數個屬性,會影響在螢幕上繪製的專案品質。 您可以藉由呼叫 get 和 set 方法來檢視及操作這些屬性。 例如,您可以呼叫 Graphics::SetTextRenderingHint 方法,以指定在套用至文字的任何) 時, (的反鋸齒類型。 影響品質的其他集合方法是Graphics::SetSmoothingModeGraphics::SetCompositingMode、Graphics::SetCompositingQualityGraphics::SetInterpolationMode

下列範例會繪製兩個省略號,其中一個平滑模式設定為 SmoothingModeAntiAlias ,另一個將 smoothing 模式設定為 SmoothingModeHighSpeed

Graphics graphics(hdc);
Pen pen(Color(255, 0, 255, 0));  // opaque green

graphics.SetSmoothingMode(SmoothingModeAntiAlias);
graphics.DrawEllipse(&pen, 0, 0, 200, 100);
graphics.SetSmoothingMode(SmoothingModeHighSpeed);
graphics.DrawEllipse(&pen, 0, 150, 200, 100);

轉換

Graphics物件會維護兩個轉換 (世界和頁面) ,這些轉換會套用至該Graphics物件所繪製的所有專案。 任何相依轉換都可以儲存在世界轉換中。 Affine 轉換包括縮放、旋轉、反映、扭曲和翻譯。 頁面轉換可用於縮放,以及變更單位 (,例如圖元到英吋) 。 如需轉換的詳細資訊,請參閱 座標系統和轉換

下列範例會設定 Graphics 物件的世界和頁面轉換。 世界轉換設定為 30 度旋轉。 頁面轉換已設定,以便將傳遞至第二個 Graphics::D rawEllipse 的座標視為公釐,而不是圖元。 程式碼會對 Graphics::D rawEllipse 方法進行兩個相同的呼叫。 世界轉換會套用至第一個 Graphics::D rawEllipse 呼叫,而轉換 (世界和頁面) 都會套用至第二個 Graphics::D rawEllipse 呼叫。

Graphics graphics(hdc);
Pen pen(Color(255, 255, 0, 0));

graphics.ResetTransform();
graphics.RotateTransform(30.0f);            // World transformation
graphics.DrawEllipse(&pen, 30, 0, 50, 25);
graphics.SetPageUnit(UnitMillimeter);       // Page transformation
graphics.DrawEllipse(&pen, 30, 0, 50, 25);

下圖顯示兩個省略號。 請注意,30 度旋轉與座標系統的原點有關, (工作區左上角) ,而不是橢圓形的中心。 另請注意,1 的畫筆寬度表示第一個橢圓形的 1 圖元,而第二個橢圓形則表示 1 公釐。

包含小型、細橢圓形和大型、較粗橢圓形的視窗螢幕擷取畫面

 

裁剪區域

Graphics物件會維護裁剪區域,以套用至該Graphics物件所繪製的所有專案。 您可以呼叫 SetClip 方法來設定裁剪區域。

下列範例會藉由形成兩個矩形的聯集來建立加型區域。 該區域會指定為 Graphics 物件的裁剪區域。 然後,程式碼會繪製限制為裁剪區域內部的兩行。

Graphics graphics(hdc);
Pen pen(Color(255, 255, 0, 0), 5);  // opaque red, width 5
SolidBrush brush(Color(255, 180, 255, 255));  // opaque aqua

// Create a plus-shaped region by forming the union of two rectangles.
Region region(Rect(50, 0, 50, 150));
region.Union(Rect(0, 50, 150, 50));
graphics.FillRegion(&brush, &region);

// Set the clipping region.
graphics.SetClip(&region);

// Draw two clipped lines.
graphics.DrawLine(&pen, 0, 30, 150, 160);
graphics.DrawLine(&pen, 40, 20, 190, 150);

下圖顯示裁剪的線條。

圖例顯示以兩條對角線交叉的彩色圖案