GDI
一、颜色、画笔和画刷
1、使用画笔
创建画笔函数CreatePen()
HPEN CreatePen(int fnPenStyle, //笔的样式,如PS_SOLID(实线),PS_DASH(虚线),PS_DOT(点),PS_DASHDOT(点划线),PS_DASHDOTDOT
int nWidth, //笔的像素宽度
COLORREF crColor //颜色,通过RGB定义
);
例子:红色笔
HPEN red _pen=CreatePen(PS_SOLID,1,RGB(255,0,0));
注意:将任何GDI对象选择到图形设备描述表,使用SelectObject函数
如:HDC hdc;
SelectObject(hdc,red_pen);
销毁由DeleteObject()函数完成ReleaseObject(red_pen);
2、使用画刷
创建画刷有两种:实心的(Solid)和阴影的(Hatched)
创建实心画刷: HBRUSH CreateSolidBrush(COLORREF crColor);
例子:HBRUSH red_brush=CreateSolidBrush(RGB(0,255,0));
创建阴影画刷: HBRUSH CreateHatchBrush(int fnStyle, COLORREF clrref);
fnStyle值有:HS_BDIAGONAL 从左上到右下的45度阴影线
HS_CROSS 水平和垂直的交叉阴影线
HS_DIAGCROSS 45度交叉阴影线
HS_FDIAGONAL 从左下到右上的45度阴影线
HS_HORIZONTAL 水平阴影线
HS_VERTICAL 垂直阴影线
二、点、线、平面多边形和圆
1、绘制点
COLORREF SetPixel(HDC hdc,int x,int y,COLORREF crColor);
例:HDC hdc;
SetPixel(hdc,1,1,RGB(255,0,0));
2、绘制线段
A、创建画笔,并在图形设备描述表中选定该画笔,所有线段都将使用该画笔来绘制
B、设定线段的起始位置
C、从起始位置到终点位置绘制线段(该终点位置成为下一条线段的起始位置)
D、如果想绘制更多的线段,重复C
设定该光标的初始位置的函数是MoveToEx函数
BOOL MoveToEx(HDC hdc,int x,int y,LPPOINT lpPoint); //最后一个参数是用来保存最后一个位置
例:Point last_pos;
MoveToEx(hdc,10,10,&last_pos);
设置好线段的初始位置后,调用LineTo()函数来绘制一条线段
BOOL LineTo(HDC hdc,int xEnd,int yEnd);
3、绘制矩形
A、用Rectangle()函数,原型如下:
BOOL Rectangle(HDC hdc,int nLeftRect,int nTopRect,int nRightRect,int nBottomRect);
B、用FillRect函数,原型如下:
int FillRect(HDC hdc,CONST RECT*lprc,HBRUSH hbr);
绘制一个填充的矩形,包含左上角点,不包含右下角点
例:Rect rect{10,10,20,20};
FillRect(hdc,&rect,CreateSolidBrush(RGB(255,0,0)))
C、用FrameRect函数,原型如下
int FrameRect(HDC hdc,CONST RECT* lprc,HBRUSH hbr);
绘制仅有边界的中空的矩形
4、绘制圆
绘制椭圆的函数是Ellipse(),原型如下:
BOOL ELLIPSE(HDC hdc,int nLeftRect,int nTopRect,int nRightRect,int nBottomRect);
如果要画圆的话,必须首先确认作为边界的矩形是正方形
5、绘制多边形
绘制多边形的函数是Polygon()
BOOL Polygon(HDC hdc,CONST POINT *lpPoints,int nCount);
例:
POINT poly[7]={p0x,p0y,p1x,p1y,p2x,p2y,p3x,p3y,p4x,p4y,p5x,p5y,p6x,p6y};
Polygon(hdc,poly,7);