MFC中的GDI繪圖(4)

3、創建繪圖工具並選入DC

   有了畫布,要繪圖我們必須有畫筆畫刷。在Windows中有HPEN、HBRUSH等GDI對象,MFC對GDI對象進行了很好的封裝,提供了封裝GDI對象的類,如CPen、CBrush、CFont、CBitmap和CPalette等,這些類都是GDI對象類CGdiObject的派生類。

   一般先創建畫筆(刷),然後調用CDC::SelectObject函數將畫筆(刷)選入設備環境最爲當前繪圖工具,繪圖完畢恢復設備環境以前的畫筆(刷)對象,最後調用CGdiObject::DeleteObject函數刪除畫筆(刷)對象。

   這裏需要注意的是,CGdiObject::DeleteObject函數徹底刪除底層GDI對象(CPen和CBrush類的基類)。在MFC中,當對象銷燬時會調用對象的析構函數自動刪除對象,一般不必調用CGdiObject::DeleteObject刪除GDI對象,因爲如果設備環境還在使用一個GDI對象時,將引起應用程序崩潰或出現難以理解的運行錯誤。

   (1)創建畫筆

BOOL CPen::CreatePen( int nPenStyle, int nWidth, COLORREF cfColor );

nPenStyle  指定畫筆的風格。其可能取值的列表,請參見CPen構造函數中的nPenStyle參數。

nWidth   指定畫筆的寬度。如果這個值爲0,則不管是什麼映射模式,以設備單位表示的寬度總是一個像素。

crColor 包含畫筆的一個RGB顏色,爲COLORREF結構。 

此外,可通過CDC::SelectStockObject函數來調用系統預定義的庫存筆對應的CGdiObject對象。

pOldPen = (Cpen*)pDC->SelectStockObject(BLACK_PEN);

(2)創建畫刷

BOOL CBrush::CreateSolidBrush ( COLORREF crColor );

BOOL CBrush::CreateHatchBrush( int nIndex, COLORREF crColor );

參數: nIndex 指定畫刷的陰影線風格。可取的值如下:

HS_HORIZONTAL   /* ==== */

HS_VERTICAL    /* ||||| */

HS_FDIAGONAL  /* \\\\\ */

HS_BDIAGONAL  /* ///// */

HS_CROSS       /* +++++ */

HS_DIAGCROSS  /* xxxxx */

返回值:調用成功時返回非零值,否則爲0。

此外,可通過CDC::SelectStockObject函數來調用系統預定義的庫存畫刷對應的CGdiObject對象。

pOldBrush = (CBrush*)pDC->SelectStockObject(BLACK_BRUSH);

(3)將畫筆(刷)選入設備環境。

以下爲MFC中默認映射方式下的GDI繪圖的模塊:

//先獲取設備環境pDC

    CPen *pOldPen,newPen;

    CBrush *pOldBrush,newBrush1,newBrush2;

    //創建寬度爲pixel的白色實線畫筆

    newPen.CreatePen(PS_SOLID,1,RGB(0,0,0));

    //創建紅色實線畫刷

    newBrush1.CreateSolidBrush(RGB(255,0,0));

    //創建紅色實線度的向下(從右到左)影線的陰影畫刷

    newBrush2.CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0));

    //將newPen畫筆和newBrush1畫刷對象選入設備環境

    pOldPen = pDC->SelectObject(&newPen);

    pOldBrush = pDC->SelectObject(&newBrush1);

    //調用DC繪圖函數繪圖

    //……

    //繪圖完畢,恢復原來畫筆、畫刷

    pDC->SelectObject(pOldPen);

pDC->SelectObject(pOldBrush);

//刪除創建的畫筆、畫刷

// newPen.DeleteObject();

// newBrush1.DeleteObject();

// newBrush2.DeleteObject();

  (4)當繪製文本Text時,一般可以通過調用CDC::SetBkColor函數來設置背景顏色,調用CDC::SetTextColor函數來設置文字顏色,調用CDC::SetTextAlign函數設置文本對齊標記。

4、調用DC繪圖函數繪圖

GDI爲提供了繪製基本圖形的成員函數,在MFC中這些函數封裝在CDC類中。

注意:繪圖函數使用的座標都是邏輯座標。

常用CDC繪圖函數

函數

功能

線輸出函數

GetCurrentPosition

獲取筆的當前位置(以邏輯座標表示)

MoveTo

移動當前位置

LineTo

從當前位置到一點畫直線,但不包括那個點

Arc

畫一段橢圓弧

ArcTo

畫一段橢圓弧。除了更新當前位置以外,這個函數與Arc類似

PolyPolyline

畫多組相連線段。這個函數不使用也不更新當前位置

PolylineTo

畫一條或多條直線,並把當前位置移到最後一條直線的終點

PolyBezier

畫一條或多條Bezier樣條。不使用也不更新當前位置

PolyBezierTo

畫一條或多條Bezier樣條,並把當前位置移到最後一條Bezier樣條的終點

 

 

橢圓和多邊形函數

Chord

繪製橢圓弧(橢圓和一條線段相交圍成的閉合圖形)

DrawFocusRect

繪製用於表示焦點的風格的矩形

Ellipse

繪製橢圓

Pie

繪製餅形圖

Polygon

繪製多邊形,包含由線段連接的一個或多個點(頂點)

PolyPolygon

創建使用當前多邊形填充模式的兩個或多個多邊形,多邊形可以相互分開或疊加

Polyline

繪製多邊形,包含連接指定點的一組線段

Rectangle

使用當前筆繪製矩形,用當前畫刷填充

RoundRect

使用當前筆繪製圓角矩形,用當前畫刷填充

位圖函數

BitBlt

從指定設備上下文拷貝位圖

StretchBlt

把位圖由源矩形和設備移動到目標矩形,必要時拉伸或壓縮位圖以適合目標矩形的維數

GetPixel

獲取指定點像素的RGB顏色值

SetPixel

設置指定點像素爲最接近指定色的近似值

文本函數

TextOut

用當前選取字體在指定位置寫字符串

ExtTextOut

用當前選取字體在矩形區域寫字符串

TabbedTextOut

在指定位置寫字符串,製表符擴展爲製表符停止位置數組中指定值

DrawText

在指定矩形內繪製格式化文本

-------------------詳情參考MSDN、MFC類庫詳解-----------------

 --------------------To be continued------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章