Windows图形设备接口(GDI)
图形设备接口(GDI)是为与设备无关的图形设计的。
- win系统提供了应用程序与具体设备分离的功能,由os将应用程序的图形输入转变为设备的输出。GUI的设备无关性是os的特色之一,用户通过通知GUI来加载相应的硬件设备。
图像刷新
- 什么时候要刷新?
窗口覆盖恢复,窗口移动,对象穿越(如光标移动)。
图形刷新包括:1、刷新的请求 2、系统对刷新请求的相应 3、具体的刷新方法。
设备
一般指打印机,绘图仪等输出设备。
- 获取设备环境
①响应WM_PAINT消息进行图形刷新时:
HDC hdc = BeginPaint(hwnd,&ps);//ps为PAINTSTRUCT类型,用于标识无效区域
//释放
EndPaint(hwnd,&ps);
②若不是由WM_PAINT消息驱动,则调用GetDC()
hdc = GetDC(hwnd);
//释放
ReleaseDC(hwnd,hdc);
③GetDCEx()是GetDC()的扩展,返回指向特定窗口的用户区或整个窗口的句柄,释放函数一样。
映射模式
用户在逻辑坐标系绘制与操作即可,映射模式定义了逻辑坐标系到设备的度量单元与方向的转换。
//设置模式:
SetMapMode(hdc,nMapMode);
//得到当前设备环境模式
nMapMode = GetMapMode(hdc);
//窗口区域定义
SetWindowExtEx()
//视口区域定义
SetViewPortExtEx()
获取用户区尺寸
getWindowRect()
getClientRect()
绘图工具与颜色
画笔
创建:HPEN hp=(HPEN)GetStockObject():
可获取系统定义的4种画笔。
hp=CreatePen()
创建新画笔
将画笔选入设备环境:hpOld=SelectObject(hdc,hp)
。SelectObject()函数会保存上一次画笔,所以删除前有必要的话可以恢复。
删除画笔:DeleteObject(hp)
:
颜色
RGB(255,255,255)
常用绘图函数
设置当前画笔位置:MoveToEx()
从当前位置向指定位置画直线:LineTo()
线段依次连接给定点:PolyLine()
弧线:Arc()
扇形:Pie()
填充的矩形:Rectangle()
圆角矩形:RoundRect()
椭圆:Ellipse()
多边形:Polygon()
文本输出与字体设置
windows系统提供7种基本字体。
选择系统字体步骤:
- 定义字体句柄变量
HFONT hf
- 获取系统字体句柄:
hf=(HFONT)GetStockObject()
- 将字体选入设备环境:
SetObject(hf)
创建自定义字体
hf=CreateFont()
设置字体和背景颜色
SetTextColor(hdc,color)
setBkColor(hdc,color)
文本输出过程
- 获取字体信息
:GetTextMetrix(hdc,&tm)
- 格式化文本:(1)确定后续文本坐标:GetTextExtentPoint()。(2)确定换行时文本坐标:
y=y0+tm.tmHeight+tm.tmExternalLeading
- 文本输出(1)
TextOut()
或DrawText()
//这种输出的字符被一个矩形框着`。