VS2010/MFC編程入門之四十九(圖形圖像:CDC類及其屏幕繪圖函數)

上一節中雞啄米講了文本輸出的知識,本節的主要內容是CDC類及其屏幕繪圖函數。

       CDC類簡介

       CDC類是一個設備上下文類。

       CDC類提供了用來處理顯示器或打印機等設備上下文的成員函數,還有處理與窗口客戶區關聯的顯示上下文的成員函數。使用CDC的成員函數可以進行所有的繪圖操作,包括處理繪圖工具、GDI對象的選擇、顏色和調色板的處理、獲取和設置繪圖屬性、映射、窗口範圍、座標轉換、剪切以及繪製直線、簡單圖形、橢圓和多邊形等,另外它還爲文本輸出、處理字體、使用打印機跳轉和滾動等提供了成員函數。

       如上所述,CDC類幾乎封裝了所有的Windows GDI函數,另外,MFC中還有幾個由CDC類派生的子類,包括CWindowDC、CPaintDC、CClientDC、CMetaFileDC,它們用來進行一些特定的繪圖操作。

       一般我們在使用完CDC對象後要記得刪除它,否則會有內存泄露。很多情況下我們可以調用CWnd::GetDC()函數來獲取設備上下文指針,即CDC指針,這個時候記得用完後調用CWnd::ReleaseDC()函數釋放設備上下文。

VS2010/MFC編程入門之四十九(圖形圖像:CDC類及其屏幕繪圖函數)

       CDC類的屏幕繪圖成員函數

       CDC類有很多成員函數,雞啄米在這裏只大概講下比較常用的繪圖函數,包括繪製點、直線、矩形、橢圓、多邊形、文本以及位圖等的成員函數。

       COLORREF SetPixel(int x,int y,COLORREF crColor);
       COLORREF SetPixel(POINT point,COLORREF crColor);

       上面兩個成員函數用來將指定座標點的像素設置爲指定的顏色,這樣就實現了畫點功能。參數x爲點的邏輯x座標;參數y爲點的邏輯y座標;參數crColor爲要爲點設置的顏色;參數point指定點的邏輯x座標和邏輯y座標,可以爲其傳入POINT結構體變量或者CPoint對象。

       CPoint MoveTo(int x,int y);
       CPoint MoveTo(POINT point);

       將當前點移動到指定位置。參數x指定新位置的邏輯x座標;參數y指定新位置的邏輯y座標;參數point指定新位置的邏輯x座標和邏輯y座標,可以爲其傳入POINT結構體變量或者CPoint對象。

       BOOL LineTo(int x,int y);
       BOOL LineTo(POINT point);

       繪製一條從當前點到指定點(不包括指定點)的直線。參數x爲指定點的邏輯x座標;參數y爲指定點的邏輯y座標;參數point爲指定點的邏輯x座標和邏輯y座標。一般我們繪製直線時就可以先調用MoveTo函數移動當前點到某個位置,然後調用LineTo畫直線。

       BOOL Rectangle(int x1,int y1,int x2,int y2);
       BOOL Rectangle(LPCRECT lpRect);

       使用當前畫筆繪製矩形。參數x1指定矩形左上角的x座標;參數y1指定矩形左上角的y座標;參數x2指定矩形右下角的x座標;參數y2指定矩形右下角的y座標;以上座標均爲邏輯單位。參數lpRect爲矩形對象的指針,可以爲其傳入CRect對象或RECT結構體變量的指針。

       BOOL Ellipse(int x1,int y1,int x2,int y2);
       BOOL Ellipse(LPCRECT lpRect);

       繪製橢圓。參數x1指定橢圓的包圍矩形左上角的x座標;參數y1指定橢圓的包圍矩形左上角的y座標;參數x2指定橢圓的包圍矩形右下角的x座標;參數y2指定橢圓的包圍矩形右下角的y座標;以上座標均爲邏輯單位。參數lpRect指定橢圓的包圍矩形,可以傳入CRect對象或RECT結構體變量的指針。

       BOOL Polyline(LPPOINT lpPoints,int nCount);

       由指定的多邊形頂點繪製多邊形。參數lpPoints爲指向一個POINT結構體變量數組或CPoint對象數組的指針,其中的POINT結構體變量或CPoint對象代表了多邊形頂點的座標;參數nCount爲數組中點的個數,至少爲2。

       virtual BOOL TextOut(int x,int y,LPCTSTR lpszString,int nCount);
       BOOL TextOut(int x,int y,const CString& str);

       使用當前選擇的字體在指定位置輸出文本。 參數x指定文本起始點的x座標;參數y指定文本起始點的y座標;參數lpszString爲要輸出的文本字符串;參數nCount指定字符串中的字節個數;參數str爲包含要輸出的字符的CString對象。這兩個函數在上一節中其實已經講到了。

       BOOL BitBlt(
              int x,
              int y,
              int nWidth,
              int nHeight,
              CDC* pSrcDC,
              int xSrc,
              int ySrc,
              DWORD dwRop
       );

       從源設備上下文拷貝一幅位圖到當前設備上下文。參數x指定目標矩形區域左上角的邏輯x座標;參數y指定目標矩形區域左上角的邏輯y座標;參數nWidth指定目標矩形區域和源位圖的寬度(邏輯單位);參數nHeight指定目標矩形區域和源位圖的高度(邏輯單位);參數pSrcDC爲指向源設備上下文的CDC對象的指針,如果dwRop指定了一個不包含源的光柵操作,那麼pSrcDC可以爲NULL;參數xSrc指定源位圖左上角的邏輯x座標;參數ySrc指定源位圖左上角的邏輯y座標;參數dwRop指定要執行的光柵操作,光柵操作碼定義了GDI如何將當前畫刷顏色、源位圖顏色和目標位圖顏色組合形成新的顏色,下面是一些常用的光柵操作碼及含義:

       BLACKNESS:表示使用與物理調色板的索引0相關的色彩來填充目標矩形區域,(對缺省的物理調色板而言,該顏色爲黑色)。
       DSTINVERT:表示使目標矩形區域顏色取反。 
       MERGECOPY:表示使用布爾型的AND(與)操作符將源矩形區域的顏色與特定模式組合一起。
       MERGEPAINT:通過使用布爾型的OR(或)操作符將反向的源矩形區域的顏色與目標矩形區域的顏色合併。
       NOTSRCCOPY:將源矩形區域顏色取反,於拷貝到目標矩形區域。
       NOTSRCERASE:使用布爾類型的OR(或)操作符組合源和目標矩形區域的顏色值,然後將合成的顏色取反。
       PATCOPY:將特定的模式拷貝到目標位圖上。 
       PATPAINT:通過使用布爾OR(或)操作符將源矩形區域取反後的顏色值與特定模式的顏色合併。然後使用OR(或)操作符將該操作的結果與目標矩形區域內的顏色合併。
       PATINVERT:通過使用XOR(異或)操作符將源和目標矩形區域內的顏色合併。 
       SRCAND:通過使用AND(與)操作符來將源和目標矩形區域內的顏色合併。
       SRCCOPY:將源矩形區域直接拷貝到目標矩形區域。
       SRCERASE:通過使用AND(與)操作符將目標矩形區域顏色取反後與源矩形區域的顏色值合併。 
       SRCINVERT:通過使用布爾型的XOR(異或)操作符將源和目標矩形區域的顏色合併。
       SRCPAINT:通過使用布爾型的OR(或)操作符將源和目標矩形區域的顏色合併。
       WHITENESS:使用與物理調色板中索引1有關的顏色填充目標矩形區域。(對於缺省物理調色板來說,這個顏色就是白色)。

       好了,本節就講到這裏了,主要就是大概講了講CDC類,又介紹了CDC類一些常用的繪圖函數。如果想了解更多的資料可以查閱MSDN。謝謝關注雞啄米的VS2010/MFC教程。




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