MFC GDI绘图

来源:互联网 发布:谷嫂淘宝同款排除王 编辑:程序博客网 时间:2024/03/29 20:52

      GDI(Graphics Device Interface),把应用程序的函数调用传递给图形设备驱动程序(gwes.exea到device.exe),GDI向应用程序提供一个与设备无关的编程,同时以与设备相关的格式和具体的硬件设备交互。

GDI绘图主要包含两类对象:

1.设备上下文CDC(C Device Contex)及其派生类;

2.GDI对象,包括Cpen,Cbrush,Cpaint等。

简单通俗的讲,我们可以把设备上下文理解为绘图的场景(例如:画布),GDI对象就好比是绘图工具(例如:画笔),GDI绘图,就是在用GDI对象对设备上下文进行操作。

两类对象的具体介绍:

1.      设备上下文

所谓的设备上下文(DCDevice Context)就是一种windows的数据结构,包括与设备绘制属性相关的信息。设备包括屏幕、打印机、图元文件等

2.      GDI对象

常用的GDI对象包括以下几种:

1.      Cpen对象:用来画线

2.      Cbrush对象:用来填充内部

3.      CbitMap对象:用来操作位图

4.      Cfont对象:用来绘制文本

5.      Cpalette对象:用于应用程序和色彩输出设备(显示器)之间的接口

GDI绘图的一般流程

1.      创建GDI对象

2.      创建或获取设备上下文对象

3.      使用SelectObjectGDI对象选入设备上下文

4.      使用设备输出函数在指定上下文中绘制图像

主要的GDI对象简介

1.      Cpen

创建画笔CreatePen函数,函数原型

BOOLCreatePen(int nPenStyle,int nWeith,CORLORREF )

2.    CBrush类       

MFCCbrush类封装了画刷对象,创建画刷时,首先定义一个画刷对象,然后调用CreateSolidBrushCreateHatchBrushCreatePatternBrush创建画刷。

//创建单色画刷

BOOL CreateSolidBrushCOLORREF crColor);

//创建阴影画刷

BOOL CreateHatchBrushint IndexCOLORREFcrColor

参数Index指定画刷的样式,可以设置的样式如下所示:

HS_BDIAGONAL:由左向右下斜45°的阴影线

HS_CROSS:水平和垂直的交叉线

HS_DIAGCROSS45°的斜交叉线

HS_FDIAGONAL:由左向右上斜45°的阴影线

HS_HORIZONGTAL:水平阴影线

HS_VERTICAL:垂直阴影线

//创建图案画刷

BOOL CreatePatternBrushCbitMap*pBitMap

参数pBitMap指向一个位图对象,总是使用该位图左上角8X8的大小

3.      位图CbitMap

MFCCbitmap类封装了位图对象及其基本操作,有以下几种创建方式

1.)在内存中创建位图对象

BOOL CreateBitMap

      Int                    nWidth,          //位图的宽度

      Int                    nHeight,           //位图的高度

      UINT                nPlanes,            //指定目标位图的位面数

      UINT                nBitcount,        //颜色位图

      Constvoid*     lpBit                   //位图数据

如果当前内存中已经存在位图数据,需要构造CBitMap对象便于管理位图,此时就可以简单的调用CreateBitMap即可。

2.)根据BITMAP结构在内存中创建位图对象

BOOL CreateBitMapInDirect

      LPBITMAP      lpBitmap,                   //只想BITMAP结构

CreateBitMapInDirectCreateBitMap类似,都是在内存中直接创建位图对象,CreateBitMapInDirect通过BITMAP结构指定创建位图对象的参数信息。

BITMAP结构类型:

typedef  struct tagBTIMAP{

                                            int           bmType;            //位图类型,对于逻辑位图,必须0

                                            int           bmWidth;         //位图宽度,必须大于0

                                            int           bmHeight;        //位图高度,必须大于0

                                            BYTE       bmPlanes;        //位图数据中一行有几个字节

                                       BYTE       bmBitsPixel;  //制定目标设备的位面数

                                            LPVOID bmBits;             //位图数据

}BITMAP

 

3.)创建与设备上下文兼容的位图对象

         BOOL CreateCompatibleBitmap{

                            CDC*       DC,                     //目标DC

                            Int            nWidth              //位图宽度

                            Int            nHeight             //位图高度

}

4.)从应用程序资源中加载位图对象,有两种形式,可以根据资源名或资源ID加载

BOOLLoadBitmap(LPCTSTS lpszResourceName //位图资源名); 

BOOLLoadBitmap(UINT nIDResource//位图资源ID);

 

0 0
原创粉丝点击