MFC GDI绘图

      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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值