- MFC 教程
- MFC - 首頁
- MFC - 概述
- MFC - 環境設定
- MFC - VC++ 專案
- MFC - 入門指南
- MFC - Windows 基礎
- MFC - 對話方塊
- MFC - Windows 資源
- MFC - 屬性表
- MFC - 窗口布局
- MFC - 控制元件管理
- MFC - Windows 控制元件
- MFC - 訊息與事件
- MFC - ActiveX 控制元件
- MFC - 檔案系統
- MFC - 標準 I/O
- MFC - 文件檢視
- MFC - 字串
- MFC - Carray
- MFC - 連結列表
- MFC - 資料庫類
- MFC - 序列化
- MFC - 多執行緒
- MFC - 網際網路程式設計
- MFC - GDI
- MFC - 庫
- MFC 有用資源
- MFC - 快速指南
- MFC - 有用資源
- MFC - 討論
MFC - GDI
Windows 提供了各種繪圖工具供在裝置環境中使用。它提供用於繪製線條的筆、用於填充內部的畫刷以及用於繪製文字的字型。MFC 提供了等效於 Windows 中繪圖工具的圖形物件類。
繪圖
裝置環境是 Windows 資料結構,其中包含有關裝置(如顯示器或印表機)的繪圖屬性的資訊。所有繪圖呼叫都是透過裝置環境物件進行的,該物件封裝了 Windows 用於繪製線條、形狀和文字的 API。
裝置環境允許在 Windows 中進行裝置無關繪圖。裝置環境可用於繪製到螢幕、印表機或圖元檔案。
CDC 是在 MFC 中進行繪圖的最基本類。CDC 物件提供成員函式來執行基本的繪圖步驟,以及用於處理與視窗客戶區關聯的顯示環境的成員。
| 序號 | 名稱及描述 |
|---|---|
| 1 | AbortDoc 終止當前列印作業,擦除應用程式自上次呼叫 StartDoc 成員函式以來寫入裝置的所有內容。 |
| 2 | AbortPath 關閉並丟棄裝置環境中的任何路徑。 |
| 3 | AddMetaFileComment 將註釋從緩衝區複製到指定的增強格式圖元檔案。 |
| 4 | AlphaBlend 顯示具有透明或半透明畫素的點陣圖。 |
| 5 | AngleArc 繪製一條線段和一條弧線,並將當前位置移動到弧線的結束點。 |
| 6 | Arc 繪製橢圓弧。 |
| 7 | ArcTo 繪製橢圓弧。此函式類似於 Arc,但會更新當前位置。 |
| 8 | Attach 將 Windows 裝置環境附加到此 CDC 物件。 |
| 9 | BeginPath 在裝置環境中開啟路徑括號。 |
| 10 | BitBlt 從指定的裝置環境複製點陣圖。 |
| 11 | Chord 繪製弦(由橢圓和線段的交點界定的封閉圖形)。 |
| 12 | CloseFigure 關閉路徑中的開放圖形。 |
| 13 | CreateCompatibleDC 建立一個與另一個裝置環境相容的記憶體裝置環境。您可以使用它來準備記憶體中的影像。 |
| 14 | CreateDC 為特定裝置建立裝置環境。 |
| 15 | CreateIC 為特定裝置建立資訊環境。這提供了一種快速獲取有關裝置資訊而不建立裝置環境的方法。 |
| 16 | DeleteDC 刪除與此 CDC 物件關聯的 Windows 裝置環境。 |
| 17 | DeleteTempMap 由 CWinApp 空閒時間處理程式呼叫,以刪除由 FromHandle 建立的任何臨時 CDC 物件。還分離裝置環境。 |
| 18 | Detach 將 Windows 裝置環境從此 CDC 物件分離。 |
| 19 | DPtoHIMETRIC 將裝置單位轉換為 HIMETRIC 單位。 |
| 20 | DPtoLP 將裝置單位轉換為邏輯單位。 |
| 21 | Draw3dRect 繪製一個三維矩形。 |
| 22 | DrawDragRect 在矩形被拖動時擦除並重繪它。 |
| 23 | DrawEdge 繪製矩形的邊緣。 |
| 24 | DrawEscape 訪問影片顯示的繪圖功能,這些功能無法透過圖形裝置介面 (GDI) 直接獲得。 |
| 25 | DrawFocusRect 以用於指示焦點的樣式繪製矩形。 |
| 26 | DrawFrameControl 繪製框架控制元件。 |
| 27 | DrawIcon 繪製圖標。 |
| 28 | DrawState 顯示影像並應用視覺效果以指示狀態。 |
| 29 | DrawText 在指定的矩形中繪製格式化文字。 |
| 30 | DrawTextEx 使用其他格式在指定的矩形中繪製格式化文字。 |
| 31 | Ellipse 繪製橢圓。 |
| 32 | EndDoc 結束由 StartDoc 成員函式啟動的列印作業。 |
| 33 | EndPage 通知裝置驅動程式頁面即將結束。 |
| 34 | EndPath 關閉路徑括號並將括號定義的路徑選入裝置環境。 |
| 35 | EnumObjects 列舉裝置環境中可用的筆和畫刷。 |
| 36 | Escape 允許應用程式訪問特定裝置無法透過 GDI 直接獲得的功能。還允許訪問 Windows 轉義函式。應用程式發出的轉義呼叫將被翻譯併發送到裝置驅動程式。 |
| 37 | ExcludeClipRect 建立一個新的剪輯區域,該區域由現有剪輯區域減去指定的矩形組成。 |
| 38 | ExcludeUpdateRgn 透過從視窗的剪輯區域中排除更新區域來阻止在視窗的無效區域內繪製。 |
| 39 | ExtFloodFill 使用當前畫刷填充區域。提供比 FloodFill 成員函式更多的靈活性。 |
| 40 | ExtTextOut 使用當前選定的字型在矩形區域內寫入字元字串。 |
| 41 | FillPath 關閉當前路徑中的任何開放圖形,並使用當前畫刷和多邊形填充模式填充路徑的內部。 |
| 42 | FillRect 使用特定畫刷填充給定矩形。 |
| 43 | FillRgn 使用指定的畫刷填充特定區域。 |
| 44 | FillSolidRect 用純色填充矩形。 |
| 45 | FlattenPath 將路徑中選定的任何曲線轉換為當前裝置環境,並將每個曲線轉換為一系列線。 |
| 46 | FloodFill 用當前畫刷填充區域。 |
| 47 | FrameRect 在矩形周圍繪製邊框。 |
| 48 | FrameRgn 使用畫刷在特定區域周圍繪製邊框。 |
| 49 | FromHandle 在給定裝置環境控制代碼時返回指向 CDC 物件的指標。如果 CDC 物件未附加到控制代碼,則會建立一個臨時 CDC 物件並將其附加。 |
| 50 | GetArcDirection 返回裝置環境的當前弧方向。 |
| 51 | GetAspectRatioFilter 檢索當前縱橫比過濾器的設定。 |
| 52 | GetBkColor 檢索當前背景顏色。 |
| 53 | GetBkMode 檢索背景模式。 |
| 54 | GetBoundsRect 返回指定裝置環境的當前累積邊界矩形。 |
| 55 | GetBrushOrg 檢索當前畫刷的原點。 |
| 56 | GetCharABCWidths 檢索給定範圍內連續字元的寬度(以邏輯單位為單位),這些字元來自當前字型。 |
| 57 | GetCharABCWidthsI 檢索給定範圍內連續字形索引的寬度(以邏輯單位為單位),這些字形索引來自當前 TrueType 字型。 |
| 58 | GetCharacterPlacement 檢索有關字元字串的各種型別的資訊。 |
| 59 | GetCharWidth 檢索給定範圍內連續字元的分數寬度,這些字元來自當前字型。 |
| 60 | GetCharWidthI 檢索給定範圍內連續字形索引的寬度(以邏輯座標為單位),這些字形索引來自當前字型。 |
| 61 | GetClipBox 檢索當前剪輯邊界的緊密邊界矩形的尺寸。 |
| 62 | GetColorAdjustment 檢索裝置環境的顏色調整值。 |
| 63 | GetCurrentBitmap 返回指向當前選定的 CBitmap 物件的指標。 |
| 64 | GetCurrentBrush 返回指向當前選定的 CBrush 物件的指標。 |
| 65 | GetCurrentFont 返回指向當前選定的 CFont 物件的指標。 |
| 66 | GetCurrentPalette 返回指向當前選定的 CPalette 物件的指標。 |
| 48 | GetCurrentPen 返回指向當前選定的 CPen 物件的指標。 |
| 67 | GetCurrentPosition 檢索筆的當前位置(以邏輯座標為單位)。 |
| 68 | GetDCBrushColor 檢索當前畫刷顏色。 |
| 69 | GetDCPenColor 檢索當前筆顏色。 |
| 70 | GetDeviceCaps 檢索有關給定顯示裝置的功能的指定型別的裝置特定資訊。 |
| 71 | GetFontData 從可縮放字型檔案檢索字型度量資訊。要檢索的資訊透過指定字型檔案中的偏移量和要返回的資訊長度來識別。 |
| 72 | GetFontLanguageInfo 返回有關指定顯示環境的當前選定字型的資訊。 |
| 73 | GetGlyphOutline 檢索當前字型中輪廓字元的輪廓曲線或點陣圖。 |
| 74 | GetGraphicsMode 檢索指定裝置環境的當前圖形模式。 |
| 75 | GetHalftoneBrush 檢索半色調畫刷。 |
| 76 | GetKerningPairs 檢索指定裝置環境中當前選定的字型的字元間距對。 |
| 77 | GetLayout 檢索裝置環境 (DC) 的佈局。佈局可以是左到右(預設)或右到左(映象)。 |
| 78 | GetMapMode 檢索當前對映模式。 |
| 79 | GetMiterLimit 返回裝置環境的斜接限制。 |
| 80 | GetNearestColor 檢索給定裝置可以表示的與指定邏輯顏色最接近的邏輯顏色。 |
| 81 | GetOutlineTextMetrics 檢索 TrueType 字型的字型度量資訊。 |
| 82 | GetOutputCharWidth 使用輸出裝置上下文從當前字型中檢索連續字元組中各個字元的寬度。 |
| 83 | GetOutputTabbedTextExtent 計算輸出裝置上下文上字元字串的寬度和高度。 |
| 84 | GetOutputTextExtent 使用當前字型計算輸出裝置上下文上文字行的寬度和高度,以確定尺寸。 |
| 85 | GetOutputTextMetrics 從輸出裝置上下文中檢索當前字型的度量。 |
| 86 | GetPath 檢索定義選中到裝置上下文中的路徑中找到的線條端點和曲線控制點的座標。 |
| 87 | GetPixel 檢索指定點處的畫素的 RGB 顏色值。 |
| 88 | GetPolyFillMode 檢索當前的多邊形填充模式。 |
| 89 | GetROP2 檢索當前的繪圖模式。 |
| 90 | GetSafeHdc 返回m_hDC,即輸出裝置上下文。 |
| 91 | GetStretchBltMode 檢索當前的點陣圖拉伸模式。 |
| 92 | GetTabbedTextExtent 計算屬性裝置上下文上字元字串的寬度和高度。 |
| 93 | GetTextAlign 檢索文字對齊標誌。 |
| 94 | GetTextCharacterExtra 檢索字元間距量的當前設定。 |
| 95 | GetTextColor 檢索當前的文字顏色。 |
| 96 | GetTextExtent 使用當前字型計算屬性裝置上下文上文字行的寬度和高度,以確定尺寸。 |
| 97 | GetTextExtentExPointI 檢索指定字串中將在指定空間內適合的字元數,並填充一個數組,其中包含每個字元的文字範圍。 |
| 98 | GetTextExtentPointI 檢索指定字形索引陣列的寬度和高度。 |
| 99 | GetTextFace 將當前字型的字型名稱複製到緩衝區中,作為以 null 結尾的字串。 |
| 100 | GetTextMetrics 從屬性裝置上下文中檢索當前字型的度量。 |
| 101 | GetViewportExt 檢索視口的 x 和 y 範圍。 |
| 102 | GetViewportOrg 檢索視口原點的 x 和 y 座標。 |
| 103 | GetWindow 返回與顯示裝置上下文關聯的視窗。 |
| 104 | GetWindowExt 檢索關聯視窗的 x 和 y 範圍。 |
| 105 | GetWindowOrg 檢索關聯視窗原點的 x 和 y 座標。 |
| 106 | GetWorldTransform 檢索當前的世界空間到頁面空間的轉換。 |
| 107 | GradientFill 使用漸變顏色填充矩形和三角形結構。 |
| 108 | GrayString 在給定位置繪製暗淡(灰色)文字。 |
| 109 | HIMETRICtoDP 將 HIMETRIC 單位轉換為裝置單位。 |
| 110 | HIMETRICtoLP 將 HIMETRIC 單位轉換為邏輯單位。 |
| 111 | IntersectClipRect 透過形成當前區域和矩形的交集來建立一個新的剪裁區域。 |
| 112 | InvertRect 反轉矩形的內容。 |
| 113 | InvertRgn 反轉區域中的顏色。 |
| 114 | IsPrinting 確定裝置上下文是否用於列印。 |
| 115 | LineTo 從當前位置繪製一條線到某個點,但不包括該點。 |
| 116 | LPtoDP 將邏輯單位轉換為裝置單位。 |
| 117 | LPtoHIMETRIC 將邏輯單位轉換為 HIMETRIC 單位。 |
| 118 | MaskBlt 使用給定的掩碼和光柵運算組合源和目標點陣圖的顏色資料。 |
| 119 | ModifyWorldTransform 使用指定的模式更改裝置上下文的全域性轉換。 |
| 120 | MoveTo 移動當前位置。 |
| 121 | OffsetClipRgn 移動給定裝置的剪裁區域。 |
| 122 | OffsetViewportOrg 相對於當前視口原點的座標修改視口原點。 |
| 123 | OffsetWindowOrg 相對於當前視窗原點的座標修改視窗原點。 |
| 124 | PaintRgn 使用選定的畫刷填充區域。 |
| 125 | PatBlt 建立位模式。 |
| 126 | Pie 繪製一個扇形。 |
| 127 | PlayMetaFile 在給定裝置上播放指定元檔案的內容。PlayMetaFile 的增強版本顯示儲存在給定增強格式元檔案中的圖片。元檔案可以播放任意次數。 |
| 128 | PlgBlt 執行源裝置上下文中的指定矩形中的顏色資料位到給定裝置上下文中的指定平行四邊形的位塊傳輸。 |
| 129 | PolyBezier 繪製一個或多個貝塞爾曲線。當前位置既不使用也不更新。 |
| 130 | PolyBezierTo 繪製一個或多個貝塞爾曲線,並將當前位置移動到最後一個貝塞爾曲線的結束點。 |
| 131 | PolyDraw 繪製一組線段和貝塞爾曲線。此函式更新當前位置。 |
| 132 | Polygon 繪製一個由兩點或更多點(頂點)組成的多邊形,這些點由線連線。 |
| 133 | Polyline 繪製一組連線指定點的線段。 |
| 134 | PolylineTo 繪製一條或多條直線,並將當前位置移動到最後一條線的結束點。 |
| 135 | PolyPolygon 建立兩個或多個多邊形,這些多邊形使用當前的多邊形填充模式填充。多邊形可以是不相交的,也可以是重疊的。 |
| 136 | PolyPolyline 繪製多個系列的連線線段。此函式既不使用也不更新當前位置。 |
| 137 | PtVisible 指定給定點是否在剪裁區域內。 |
| 138 | RealizePalette 將當前邏輯調色盤中的調色盤條目對映到系統調色盤。 |
| 139 | Rectangle 使用當前筆繪製矩形,並使用當前畫刷填充它。 |
| 140 | RectVisible 確定給定矩形的任何部分是否位於剪裁區域內。 |
| 141 | ReleaseAttribDC 釋放m_hAttribDC,即屬性裝置上下文。 |
| 142 | ReleaseOutputDC 釋放m_hDC,即輸出裝置上下文。 |
| 143 | ResetDC 更新 m_hAttribDC 裝置上下文。 |
| 144 | RestoreDC 將裝置上下文恢復到以前使用SaveDC儲存的狀態。 |
| 145 | RoundRect 使用當前筆繪製一個圓角矩形,並使用當前畫刷填充它。 |
| 146 | SaveDC 儲存裝置上下文的當前狀態。 |
| 147 | ScaleViewportExt 相對於當前值修改視口範圍。 |
| 148 | ScaleWindowExt 相對於當前值修改視窗範圍。 |
| 149 | ScrollDC 水平和垂直滾動位矩形。 |
| 150 | SelectClipPath 選擇當前路徑作為裝置上下文的剪裁區域,使用指定的模式將新區域與任何現有剪裁區域組合。 |
| 151 | SelectClipRgn 使用指定的模式將給定區域與當前剪裁區域組合。 |
| 152 | SelectObject 選擇 GDI 繪圖物件(如筆)。 |
| 153 | SelectPalette 選擇邏輯調色盤。 |
| 154 | SelectStockObject 選擇 Windows 提供的預定義庫存筆、畫刷或字型之一。 |
| 155 | SetAbortProc 設定程式設計師提供的回撥函式,如果必須中止列印作業,Windows 將呼叫該函式。 |
| 156 | SetArcDirection 設定用於圓弧和矩形函式的繪圖方向。 |
| 157 | SetAttribDC 設定 m_hAttribDC,即屬性裝置上下文。 |
| 158 | SetBkColor 設定當前背景顏色。 |
| 159 | SetBkMode 設定背景模式。 |
| 160 | SetBoundsRect 控制指定裝置上下文的邊界矩形資訊的累積。 |
| 161 | SetBrushOrg 指定將選入裝置上下文的下一個畫刷的原點。 |
| 162 | SetColorAdjustment 使用指定的值設定裝置上下文的顏色調整值。 |
| 163 | SetDCBrushColor 設定當前畫刷顏色。 |
| 164 | SetDCPenColor 設定當前筆顏色。 |
| 165 | SetGraphicsMode 設定指定裝置上下文的當前圖形模式。 |
| 166 | SetLayout 更改裝置上下文 (DC) 的佈局。 |
| 167 | SetMapMode 設定當前對映模式。 |
| 168 | SetMapperFlags 更改字型對映器在將邏輯字型對映到物理字型時使用的演算法。 |
| 169 | SetMiterLimit 設定裝置上下文斜接連線長度的限制。 |
| 170 | SetOutputDC 設定 m_hDC,即輸出裝置上下文。 |
| 171 | SetPixel 將指定點處的畫素設定為指定顏色的最接近近似值。 |
| 172 | SetPixelV 將指定座標處的畫素設定為指定顏色的最接近近似值。SetPixelV 比 SetPixel 快,因為它不需要返回實際繪製的點的顏色值。 |
| 173 | SetPolyFillMode 設定多邊形填充模式。 |
| 175 | SetROP2 設定當前繪圖模式。 |
| 176 | SetStretchBltMode 設定點陣圖拉伸模式。 |
| 177 | SetTextAlign 設定文字對齊標誌。 |
| 178 | SetTextCharacterExtra 設定字元間距量。 |
| 179 | SetTextColor 設定文字顏色。 |
| 180 | SetTextJustification 在字串中的換行符中新增空格。 |
| 181 | SetViewportExt 設定視口的 x 和 y 範圍。 |
| 182 | SetViewportOrg 設定視口原點。 |
| 183 | SetWindowExt 設定關聯視窗的 x 和 y 範圍。 |
| 184 | SetWindowOrg 設定裝置上下文的視窗原點。 |
| 185 | SetWorldTransform 設定當前的世界空間到頁面空間的轉換。 |
| 186 | StartDoc 通知裝置驅動程式新的列印作業已開始。 |
| 187 | StartPage 通知裝置驅動程式新的頁面已開始。 |
| 188 | StretchBlt 將點陣圖從源矩形和裝置移動到目標矩形,如果需要,則拉伸或壓縮點陣圖以適合目標矩形的尺寸。 |
| 189 | StrokeAndFillPath 關閉路徑中任何開啟的圖形,使用當前筆描繪路徑輪廓,並使用當前畫刷填充其內部。 |
| 190 | StrokePath 使用當前筆呈現指定的路徑。 |
| 191 | TabbedTextOut 在指定位置寫入字元字串,將製表符擴充套件到製表位位置陣列中指定的值。 |
| 192 | TextOut 使用當前選定的字型在指定位置寫入字元字串。 |
| 193 | TransparentBlt 將顏色資料位塊從指定的源裝置上下文傳輸到目標裝置上下文,在傳輸中渲染指定的顏色透明。 |
| 194 | UpdateColors 透過逐畫素地將客戶端區域中的當前顏色與系統調色盤匹配,更新裝置上下文的客戶端區域。 |
| 195 | WidenPath 將當前路徑重新定義為如果使用當前選定到裝置上下文中的筆描繪路徑將繪製的區域。 |
線條
步驟 1 - 讓我們透過建立一個名為MFCGDIDemo的新基於 MFC 的單文件專案來了解一個簡單的示例。
步驟 2 - 專案建立完成後,轉到解決方案資源管理器,雙擊“原始檔”資料夾下的MFCGDIDemoView.cpp檔案。
步驟 3 - 在CMFCGDIDemoView::OnDraw()方法中繪製如下所示的線條。
void CMFCGDIDemoView::OnDraw(CDC* pDC) {
pDC->MoveTo(95, 125);
pDC->LineTo(230, 125);
CMFCGDIDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
步驟 4 - 執行此應用程式。您將看到以下輸出。
步驟 5 - CDC::MoveTo()方法用於設定線條的起始位置。
使用 LineTo() 時,程式從 MoveTo() 點開始到 LineTo() 結束。
在 LineTo() 之後,如果您不呼叫 MoveTo(),並再次使用其他點值呼叫 LineTo(),則程式將從上一個 LineTo() 繪製一條線到新的 LineTo() 點。
步驟 6 - 要繪製不同的線條,您可以使用以下程式碼所示的此屬性。
void CMFCGDIDemoView::OnDraw(CDC* pDC) {
pDC->MoveTo(95, 125);
pDC->LineTo(230, 125);
pDC->LineTo(230, 225);
pDC->LineTo(95, 325);
CMFCGDIDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
步驟 7 - 執行此應用程式。您將看到以下輸出。
折線
折線是一系列連線的線。這些線儲存在 POINT 或 CPoint 值的陣列中。要繪製折線,您可以使用 CDC::Polyline() 方法。要繪製折線,至少需要兩個點。如果定義了兩個以上的點,則第一條線之後的每條線都將從前一點繪製到下一條點,直到所有點都包含在內。
步驟 1 - 讓我們來看一個簡單的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) {
CPoint Pt[7];
Pt[0] = CPoint(20, 150);
Pt[1] = CPoint(180, 150);
Pt[2] = CPoint(180, 20);
pDC−Polyline(Pt, 3);
CMFCGDIDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
步驟 2 - 執行此應用程式時,您將看到以下輸出。
矩形
矩形是由四個構成四個直角的邊組成的幾何圖形。與線條一樣,要繪製矩形,必須定義其起始位置和結束位置。要繪製矩形,可以使用 CDC::Rectangle() 方法。
步驟 1 - 讓我們來看一個簡單的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) {
pDC->Rectangle(15, 15, 250, 160);
CMFCGDIDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
步驟 2 - 執行此應用程式時,您將看到以下輸出。
正方形
正方形是由四個構成四個直角的邊組成的幾何圖形,但每條邊的長度必須相等。
讓我們來看一個簡單的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) {
pDC->Rectangle(15, 15, 250, 250);
CMFCGDIDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
執行此應用程式時,您將看到以下輸出。
扇形
扇形是由橢圓的一小部分和從橢圓中心延伸到每一側的兩條線限定的。要繪製扇形,可以使用 CDC::Pie() 方法,如下所示 -
BOOL Pie(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
(x1, y1) 點確定表示扇形的橢圓所在的矩形左上角。 (x2, y2) 點是矩形的右下角。
(x3, y3) 點以預設的逆時針方向指定扇形的起始角。
(x4, y4) 點指定扇形的終點。
讓我們來看一個簡單的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) {
pDC->Pie(40, 20, 226, 144, 155, 32, 202, 115);
CMFCGDIDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
步驟 2 - 執行此應用程式時,您將看到以下輸出。
弧線
弧線是橢圓的一部分或一段,這意味著弧線是不完整的橢圓。要繪製弧線,可以使用 CDC::Arc() 方法。
BOOL Arc(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
CDC 類配備了 SetArcDirection() 方法。
以下是語法 -
int SetArcDirection(int nArcDirection)
| 序號 | 值和方向 |
|---|---|
| 1 | AD_CLOCKWISE 圖形按順時針方向繪製 |
| 2 | AD_COUNTERCLOCKWISE 圖形按逆時針方向繪製 |
步驟 1 - 讓我們來看一個簡單的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) {
pDC->SetArcDirection(AD_COUNTERCLOCKWISE);
pDC->Arc(20, 20, 226, 144, 202, 115, 105, 32);
CMFCGDIDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
步驟 2 - 執行此應用程式時,您將看到以下輸出。
弦
到目前為止,我們繪製的弧線被認為是開放圖形,因為它們是由一條具有起點和終點的線組成的(不像圓形或矩形那樣)。弦是一條兩端由直線連線的弧線。
要繪製弦,可以使用 CDC::Chord() 方法。
BOOL Chord(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
讓我們來看一個簡單的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) {
pDC->SetArcDirection(AD_CLOCKWISE);
pDC->Chord(20, 20, 226, 144, 202, 115, 105, 32);
CMFCGDIDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
執行上述應用程式時,您將看到以下輸出。
此示例中的弧線方向設定為順時針方向。
顏色
顏色是增強物件美觀外觀的最基本物件之一。顏色是非空間物件,新增到物件以修改其某些視覺方面。MFC 庫結合 Win32 API 提供了各種操作,您可以使用這些操作來利用顏色的各個方面。
RGB 宏的行為類似於函式,允許您傳遞三個用逗號分隔的數值。每個值必須介於 0 和 255 之間,如下面的程式碼所示。
void CMFCGDIDemoView::OnDraw(CDC* pDC) {
COLORREF color = RGB(239, 15, 225);
}
讓我們來看一個簡單的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) {
COLORREF color = RGB(239, 15, 225);
pDC->SetTextColor(color);
pDC->TextOut(100, 80, L"MFC GDI Tutorial", 16);
CMFCGDIDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
執行此應用程式時,您將看到以下輸出。
字型
CFont封裝了 Windows 圖形裝置介面 (GDI) 字型,並提供用於操作字型的成員函式。要使用 CFont 物件,請構造一個 CFont 物件並將 Windows 字型附加到它,然後使用該物件的成員函式來操作字型。
讓我們來看一個簡單的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) {
CFont font;
font.CreatePointFont(920, L"Garamond");
CFont *pFont = pDC->SelectObject(&font);
COLORREF color = RGB(239, 15, 225);
pDC->SetTextColor(color);
pDC->TextOut(100, 80, L"MFC GDI Tutorial", 16);
pDC->SelectObject(pFont);
font.DeleteObject();
CMFCGDIDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
執行上述應用程式時,您將看到以下輸出。
畫筆
畫筆是用於在裝置上下文中繪製線條和曲線的工具。在圖形程式設計中,畫筆也用於繪製幾何閉合形狀(如矩形或多邊形)的邊界。Microsoft Windows 考慮兩種型別的畫筆 - 裝飾和幾何。
當畫筆只能繪製固定寬度(小於或等於 1 畫素)的簡單線條時,稱為裝飾畫筆。當畫筆可以採用不同的寬度和各種端點時,稱為幾何畫筆。MFC 提供了一個類CPen,它封裝了 Windows 圖形裝置介面 (GDI) 畫筆。
讓我們來看一個簡單的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) {
CPen pen;
pen.CreatePen(PS_DASHDOTDOT, 1, RGB(160, 75, 90));
pDC->SelectObject(&pen);
pDC->Rectangle(25, 35, 250, 125);
CMFCGDIDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
執行上述應用程式時,您將看到以下輸出。
畫刷
畫刷是一種繪圖工具,用於填充閉合形狀或線條的內部。畫刷的行為就像拿起一桶油漆並將其倒在某個地方。MFC 提供了一個類CBrush,它封裝了 Windows 圖形裝置介面 (GDI) 畫刷。
讓我們來看一個簡單的例子。
void CMFCGDIDemoView::OnDraw(CDC* pDC) {
CBrush brush(RGB(100, 150, 200));
CBrush *pBrush = pDC->SelectObject(&brush);
pDC->Rectangle(25, 35, 250, 125);
pDC->SelectObject(pBrush);
CMFCGDIDemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
}
執行此應用程式時,您將看到以下輸出。