圖形設備接口類,GDI類:CPen, CBrush,CFont,CBitmap,CRgn,CPalette等

GDI 對象:

  • Windows GDI提供了一些繪圖對象,程序通過這些GDI對象設置繪圖的工具和風格,這裏的對象是指Windows數據結構,而不是C++類的對象。
  • GDI對象是Windows圖形設備接口的抽象繪圖工具。除了畫筆和畫刷,其它GDI對象還包括字體、位圖和調色板。
  • MFC對GDI對象進行了很好的封裝,提供了封裝GDI對象的類,如CPen、CBrush、CFont、CBitmap和CPalette等,這些類都是GDI對象類CGdiObject的派生類。

================================================================

選擇一個GDI對象:

1.   CDC類提供了成員函數SelectObject()選擇用戶自己創建的GDI對象,該函數有多種重載形式,
用戶可以選擇已定製好的畫筆、畫刷、字體和位圖等不同類型的GDI對象

               CPen*           SelectObject( CPen* pPen );
               CBrush*        SelectObject( CBrush* pBrush );
virtual     CFont*           SelectObject( CFont* pFont );
               CBitmap*       SelectObject( CBitmap* pBitmap );
               int                  SelectObject( CRgn* pRgn );
               CGdiObject*  SelectObject(CGdiObject* pObject );  
   
函數參數是一個指向用戶已定製好的GDI對象的指針,選擇操作成功函數將返回以前GDI對象的指針,否則返回NULL。

 

2.   在選擇繪圖設備類對象(GDI對象)進行繪圖時,一般可按下列步驟進行:
(1)定義一個GDI對象,然後調用相應的函數(如CreatePen、CreateSolidBrush等)創建此GDI對象。
(2)將已構造出的GDI對象利用設備環境類對象的成員函數SelectObject選入到當前環境中,並同時將原來的GDI對象保存起來。
(3)繪圖結束後,恢復當前設備環境中原來的GDI對象。

注意:

        在Windows系統中包含了一些庫存的GDI對象,在第(3)步中可直接利用設備環境類(CDC)的成員函數SelectStockObject將一個Windows庫存的GDI對象選入,系統可自動將原來選入的GDI對象從設備環境中分離出來。


 
 ================================================================

圖形設備接口、GDI類:

 

CGdiObject類
CGdiObject類派生於CObject類,它是CGdiObject、CPen、CBrush、Cfont和CBitmap等的基類。
用戶不能直接生成一個CGdiObject類,而必須在它的某種設備繼承類中生成一個CGdiObject類的派生類。


CPen類

CPen類是CGdiObject類的一個派生類,它封裝了Windows圖形設備接口(GDI)中有關畫筆的操作。

創建CPen對象:

創建一個CPen對象可以有以下幾種方法:

   (1)定義一個CPen對象,用其成員函數CreatePen或CreatePenIndirect對其進行初始化。
            如:
  
                    CPen pen;
  
                    Pen.CreatePen(PS_SOLID,1,RGB(255,0,0));


   (2)定義一個CPen對象,並一次性地初始化它的所有參數。
     如:
  
                    CPen pen(PS_SOLID,1,RGB(255,0,RGB(255,0,0));


   (3)動態地創建一個CPen對象。
     如:
  
                   CPen    *pen;
              Pen  = new CPen(PS_SOLID,1,RGB(255,0,0));

                   .......

                   delete pen;
  

                   在一個函數中多次創建一個CPen對象時可以採用這種方法。
                   應用這種方法時,特別注意操作完畢後要刪除分配的CPen對象,即:delete pen;

 

CBrush類

CBrush類是CGdiObject類的一個派生類,它封裝了Windows圖形設備界面(GDI)中有關畫刷的操作。
CBrush類的用法與CPen類似。

 

創建CBrush對象:
利用CBrush類的構造函數可創建Cbrush對象。


1. 實心畫刷

用實心畫刷進行圖形填充時,以這種畫刷的顏色實心填充。其創建方法如下:

(1)定義CBrush對象,用函數CreateSolidBrush對對象進行初始化。
  
          CBrush brush;
    brush.CreateSolidBrush(RGB(255,0,0));

(2)定義CBrush類對象,並利用構造函數對對象的參數進行初始化。
  
         CBrush brush(RGB(255,0,0));

(3)動態創建。用這種方法定義時,在操作完成後要刪除創建的CBrush對象。
  
         CBrush *brush;
  
         Brush=new CBrush(RGB(255,0,0));
  
         ……
  
         delete brush;

2. 影線畫刷

影線畫刷不是用畫刷的顏色實心填充圖形,而是用不同的陰影圖案來填充。

影線畫刷的創建方法同實心畫刷一樣:
(1)定義對象,用函數初始化。
         如:
                 CBrush  brush;
                 brush.CreateSolidBrush(PS_SOLID,RGB(255,0,0));

(2)一次性創建。

         如:
               CBrush brush(HS_HORIZONTAL,RGB(255,0,0));

(3)動態創建。

         如:
              用這種方法創建的CBrush對象,在操作完成後要刪除CBrush對象。

             CBrush * brush;
             Brush = new CBrush(HS_HORIZONTAL,RGB(255,0,0));

             ……

             delete brush;


3. 位圖畫刷
位圖畫刷是用位圖圖像來填充圖形的。
函數CreatPatternBrush用來初始化一個位圖畫刷。
以下代碼創建一個位圖畫刷(其中,pBitmap指向一個位圖對象):

         CBrush brush;

         brush.CreatPatternBrush(pBitmap);

 

CFont類

CFont類是CGdiObject類的一個派生類,它封裝了邏輯字體及方法。

創建CFont對象:
CFont類只有一個構造函數,在定義了一個CFont類對象之後,必須用成員函數CreateFont或CreateFontIndirect來初始化CFont對象的參數。
CreateFont函數的參數非常多,可查閱MSDN。


CBitmap類

CBitmap類和Cpen、CBrush類一樣,是CGdiObject類的派生類,它封裝了使用Windows GDI進行圖形繪製中關於位圖的操作。


在CBitmap類中重載了兩個LoadBitmap函數,用於加載位圖資源:

BOOL LoadBitmap( LPCTSTR lpszResourceName );
BOOL LoadBitmap( UINT nIDResource );


 

 


 

 


 

 

 


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