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. 使用SelectObject把GDI对象选入设备上下文
4. 使用设备输出函数在指定上下文中绘制图像
主要的GDI对象简介
1. Cpen类
创建画笔CreatePen函数,函数原型
BOOLCreatePen(int nPenStyle,int nWeith,CORLORREF )
2. CBrush类
MFC的Cbrush类封装了画刷对象,创建画刷时,首先定义一个画刷对象,然后调用CreateSolidBrush,CreateHatchBrush或CreatePatternBrush创建画刷。
//创建单色画刷
BOOL CreateSolidBrush(COLORREF crColor);
//创建阴影画刷
BOOL CreateHatchBrush(int Index,COLORREFcrColor)
参数Index指定画刷的样式,可以设置的样式如下所示:
HS_BDIAGONAL:由左向右下斜45°的阴影线
HS_CROSS:水平和垂直的交叉线
HS_DIAGCROSS:45°的斜交叉线
HS_FDIAGONAL:由左向右上斜45°的阴影线
HS_HORIZONGTAL:水平阴影线
HS_VERTICAL:垂直阴影线
//创建图案画刷
BOOL CreatePatternBrush(CbitMap*pBitMap)
参数pBitMap指向一个位图对象,总是使用该位图左上角8X8的大小
3. 位图CbitMap
MFC的Cbitmap类封装了位图对象及其基本操作,有以下几种创建方式
1.)在内存中创建位图对象
BOOL CreateBitMap(
Int nWidth, //位图的宽度
Int nHeight, //位图的高度
UINT nPlanes, //指定目标位图的位面数
UINT nBitcount, //颜色位图
Constvoid* lpBit //位图数据
)
如果当前内存中已经存在位图数据,需要构造CBitMap对象便于管理位图,此时就可以简单的调用CreateBitMap即可。
2.)根据BITMAP结构在内存中创建位图对象
BOOL CreateBitMapInDirect(
LPBITMAP lpBitmap, //只想BITMAP结构
)
CreateBitMapInDirect和CreateBitMap类似,都是在内存中直接创建位图对象,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);
- MFC GDI绘图基础
- MFC中的GDI绘图
- MFC GDI绘图基础
- MFC中的GDI绘图
- MFC GDI+ 绘图
- MFC GDI绘图基础
- MFC中的GDI绘图
- MFC中的GDI绘图
- MFC中的GDI绘图
- MFC GDI绘图
- MFC GDI绘图
- MFC中的GDI绘图
- MFC GDI绘图基础
- MFC中GDI绘图
- MFC GDI绘图基础
- C++/MFC-GDI绘图
- MFC中的GDI绘图
- MFC GDI绘图(1)
- 2013蓝桥杯【初赛试题】三部排序
- /bin/sh: : Permission denied
- maven中jetty插件的应用
- ios 截图 图片合成 画纯色UIimage
- 字符编码介绍(二)Unicode
- MFC GDI绘图
- 最短路
- 【杂七杂八的整合】Ubuntu Linux 12.04中的一些使用技巧
- 对STL的增加之算法篇:foreach/数学领域库
- Mecanim 动画曲线
- OTA升级,第三方如何发到消息到handler
- 那些丑陋的Java API
- xenserver创建本地iso库
- 贝叶斯网络应用实例一:胸部疾病诊所