图形设备接口类,GDI类:CPen, CBrush,CFont,CBitmap,CRgn,CPalette等

来源:互联网 发布:淘宝充值劲舞团未到账 编辑:程序博客网 时间:2024/05/17 03:35

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 );


 

 


 

 


 

 

 


原创粉丝点击