这次介绍win32里的GDI,GDI是win32里非常好玩的一些函数,通过这些函数我们可以绘制出各种好看的图形。包括贴图。本次我们先介绍一部分GDI,下一次我们继续介绍GDI
本次使用的开发工具是vs2013,语言C/C++,使用的是win32项目。
一.GDI概念
概念: 图形设备接口(API),Graphics Device Interface。他是微软设计的一套API,GDI是windows图形显示程序与实际物理设备之间的一个桥梁。使用者不需要关心硬件设备,只管调用API就好
GDI的特点:不直接访问物理显示硬件,通过”设备环境”的抽象接口访问
程序与硬件(显示器等)交互时,必须获得与相对应设备环境。
使用者不用关心物理设备类型
设备环境(Device Context):简称DC,也叫做设备上下文,设备描叙表。DC就是程序可以进行绘图的地方:例如我们要在平屏幕绘图,设备就屏幕吧,而dc就是屏幕上的绘图层
设备句柄:设备上下文句柄,设备环境句柄,简称HDC.如果需要绘图,首先得得到句柄,绘图完成之后必须释放句柄
基本概念:
位图:位的矩形数据,这些位对应显示设备上的像素,简称BMP(bitmap),可以分为设备相关位图(DIB)和设备无关位图(DIB) ,我们一般使用的是DIB.
文字:GDI支持TrueType字体,这种字体是在填充轮廓线基础上建立的。实际上就是TTF后缀的字体
颜色: RGB R=0~255,G = 0~255, R = 0~255;红绿蓝,例如RGB(123,234,123)
二. 取得获取上下文句柄API
第一对好基友:
BeginPaint(窗口句柄, PAINTSTRUCT结构体指针;); 返回设备句柄
EndPaint(窗口句柄, 结构体指针);
第二对好基友:
GetDC(窗口句柄);//返回上下文句柄
ReleaseDC(窗口句柄,设备句柄);
三.图形绘制
3.1画笔
HPEN CreatePen(int nPenStyle, int nWidth, COLORREF crColor);
参数1:样式 PS_SOLID实现实线PS_DASH短线
PS_DOT点 PS_DASHDOT 短线点
第二个参数: 画笔的宽度
第三个参数: 颜色RGB,直接构建 COLORREF color = RGB(255,255,255)
3.2画刷
实心画刷:HBRUSH CreateSolidBrush(颜色)
阴影画刷: HBRUSH CreateHatchBrush(样式,颜色)
HS_BDIAGONAL---正斜线, HS_FDIAGONAL----反斜线
HS_DIAGCROSS---正反交叉 HS_CROSS---井字格
位图画刷: CreatePatternBrush(位图句柄)
HBITMAP hBmp = LoadBitmap( g_hInstance,MAKEINTRESOURCE(IDB_BITMAP1) );
HBRUSH hBrush = CreatePatternBrush( hBmp );
3.3设定设备上下文参数
直白点就是把画笔等应用到DC中
Selectobject(设备上下文句柄,需要选择的句柄);//画刷句柄,文字等
deleteSObject(需要删除的其他句柄); //删除句柄,释放内存
3.4画点
COLORREF SetPixel(设备句柄,x,y,RGB);//返回原来点颜色
GetPixel()获取某个点的颜色
3.5 画线
LineTo(设备环境句柄,终点x,终点y) true划线成功 否则失败
MoveToEx(设备环境句柄,起点x,起点Y,NULL);
3.6画圆
BOOL Ellipse(HDC hdc, int nLeftRect, int nTopRect,
nRightRect, int nBottomRect);//参数左顶右底
3.7画矩形
Rectangle(上下文句柄,左角x,左角y,右下x,右下y);
成功返回非0,读法:
RoundRect( DC: HDC; X1, Y1, X2, Y2, X3, Y3)’//圆角矩形点1、点2是构成矩形的坐标; X3是圆角宽度、Y3是圆角高度3.8画图
1 得到dc
2 创建兼容dc
3 加载位图
LoadImage(实例句柄,位图名,图片类型,宽,高,加载方式);
4.选用位图对象 selectobject()
5.进行贴图 bitblt()
刷新区域
ValidateRect(窗口句柄,const RECT * L);//更新窗口,第二个参数NULL
3.9文字
文字输出函数:
TextOut(文字输出DC句柄,x坐标,y坐标,字符串指针,字符串个数)
DrawText(设备句柄,字符串,字符串长度,LPRECT绘制区域,绘制模式)
绘制模式如下:
DT_BOTTOM--底部对齐,和DT_SINGLELINE一起使用
DT_LETF DT_RIGHT DT_TOP DT_SINGLELINE 单行显示
设置文字颜色:COLORREF SetTextColor(设备句柄,颜色)
设置文字背景透明:SetBKMode(设备句柄,模式)
模式:QPAQUE 不透明 TRANSPARENT----透明
创建字体:
BOOL CreateFont( int nHeight逻辑高度,
int nWidth逻辑宽度,
int nEscapement显示角度, //显示的坡度
int nOrientation字体角度, //水平上字体的斜角度
int nWeight字体磅数,
BYTE bItalic是否斜体,
BYTE bUnderline是否下划线,
BYTE cStrikeOut是否删除线,
BYTE nCharSet所需字符集
BYTE nOutPrecision输出精度,
BYTEnClipPrecision裁剪精度,
BYTE nQuality输出质量,
BYTE nPitchAndFamily字符间距的字符集,
LPCTSTR lpszFacename字体名称 );
BOOL PolyTextOut(HDC hdc, CONST POLYTEXT *pptxt, int cStrings);
功能:在指定设备环境下以当前所选的字体和正文颜色绘制多个字符串。
CreateFontIndirect 可以用来设置字体属性等
下一篇博客,通过画出具体的图形来介绍这些GDI函数怎么使用。