目录
GDI 绘图
画点
画线
画封闭图形
画笔:
画刷
其他
DC(Device Context): 绘图设备
HDC: 绘图设备句柄
GDI(Microsoft Graphics Device Interface) Win32提供的绘图API
GDI 绘图
0、PAINTSTRUCT结构
typedef struct tagPAINTSTRUCT {
HDC hdc; //绘图设备句柄
BOOL fErase; //背景是否需要重新绘制
RECT rcPaint; //请求指定绘制矩形的左上角和右下角
BOOL fRestore; //系统预留的
BOOL fIncUpdate; //系统预留的
BYTE rgbReserved[32]; //系统预留的,保留的内存块
} PAINTSTRUCT, *PPAINTSTRUCT;
调用 BeginPaint函数启动绘画操作。这个函数填充了PAINTSTRUCT结构体,并提供了重新绘制请求的信息。当前更新区域是在PAINTSTRUCT的rcPaint成员中给出的。此更新区域是相对于客户端区域定义的。
1、窗口句柄得到设备环境句柄HDC,
1、 采用BeginPaint获取HDC
PAINTSTRUCT ps;// 保存
HDC hdc = ::BeginPaint( hwnd, &ps );
/*
此处添加绘图代码
*/
::EndPaint( hwnd, &ps );
注:
获得的hdc的有效区域仅限于客户区无效区域的设备环境句柄,不包括标题栏、边框等。
2、 采用GetWindowDC获取HD
HDC hdc = ::GetWindowDC( hwnd );
/*
此处添加绘图代码
*/
::ReleaseDC( hwnd, hdc );
注:
绘制区域是整个窗口(边框、标题栏、客户区的总和)。
3、采用GetDC获取HDC
HDC hdc = ::GetDC( hwnd );
/*
此处添加绘图代码
*/
::ReleaseDC( hwnd, hdc );
注:
获得的hdc的有效区域仅限于客户区有效区域的设备环境句柄,不包括标题栏、边框等。
画点
1、SetPixel 指定坐标处的像素设为指定的颜色
COLORREF SetPixel(
HDC hdc,
int X,
int Y,
COLORREF crColor
);
画线
1、 MoveToEx 将当前位置移动到某一点
WINGDIAPI
BOOL WINAPI MoveToEx(
__in HDC hdc, //当前设备的句柄
__in int x, // x 坐标
__in int y, // y 坐标
__out_opt LPPOINT lppt //移动前的坐标位置
);
2、LineTo 从当前点到目标点进行画线
WINGDIAPI
BOOL WINAPI LineTo(
__in HDC hdc,
__in int x,
__in int y
);
画封闭图形
1、Rectangle 矩形
BOOL Rectangle(
__in HDC hdc,
__in int left,
__in int top,
__in int right,
__in int bottom
);
2、Ellipse 圆形等
画笔:
1、创建画笔
WINGDIAPI
HPEN
WINAPI CreatePen(
__in int iStyle, //画笔样式
__in int cWidth, //画笔粗细
__in COLORREF color //画笔颜色
); 创建成功返回句柄
注:
PS_SOILD 实心线,可以指定任意像素宽,其他线形只能一个像素
2、将画笔应用到DC中
HGDIOBJ SelectObject(
HDC hdc, // 绘图设备句柄
HGDIOBJ hgdiobj // GDI绘图对象句柄
); 返回原来GDI绘图对象句柄
3、绘图
4、取出 GDI 绘图对象,即将原来的GDI绘图对象通过SelectObject函数放回去
5、销毁GDI绘图对象
BOOL DeleteObject(
HGDIOBJ hObject //GDI绘图对象句柄
);
注:
只能删除不被DC使用的GDI绘图对象,释放前必须从DC中取出
画刷
1、创建画刷
HBRUSH CreateSolidBrush( //创建实心画刷
__in COLORREF color
);
HBRUSH CreateHatchBrush( //创建纹理画刷
int fnStyle,
COLORREF clrref
);
2、将画笔应用到DC中
3、绘图
4、取出 GDI 绘图对象,即将原来的GDI绘图对象通过SelectObject函数放回去
5、销毁GDI绘图对象
其他
HGDIOBJ GetStockObject(
int fnObject
);
函数功能:该函数检索预定义的备用笔、刷子、字体或者调色板的句柄。
参数:
fnObject:指定对象的类型,该参数可取如下值之一;
BLACK_BRUSH:黑色画笔;DKGRAY_BRUSH:暗灰色画笔;DC_BRUSH:在Windows98,Windows NT 5.0和以后版本中为纯颜色画笔,缺省色为白色,可以用SetDCBrushColor函数改变颜色,更多的信息参见以下的注释部分。GRAY_BRUSH:灰色画笔;HOLLOW_BRUSH:空画笔(相当于HOLLOW_BRUSH);
LTGRAY_BRUSH:亮灰色画笔;NULL_BRUSH:空画笔(相当于HOLLOW_BRUSH);
WHITE_BRUSH:白色画笔;BLACK_PEN:黑色钢笔;
DC_PEN:在Windows98、Windows NT 5.0和以后版本中为纯色钢笔,缺省色为白色,使用SetDCPenColor函数可以改变色彩,更多的信息,参见下面的注释部分。
WHITE_PEN:白色钢笔;ANSI_FIXED_FONT:在Windows中为固定间距(等宽)系统字体;
ANSI_VAR_FONT:在Windows中为变间距(比例间距)系统字体;
DEVICE_DEFAUCT_FONT:在WindowsNT中为设备相关字体;
DEFAULT_GUI_FONT:用户界面对象缺省字体,如菜单和对话框;
OEM_FIXED_FONT:原始设备制造商(OEM)相关固定间距(等宽)字体;
SYSTEM_FONT:系统字体,在缺省情况下,系统使用系统字体绘制菜单,对话框控制和文本;
SYSTEM_FIXED_FONT:固定间距(等宽)系统字体,该对象仅提供给兼容16位Windows版本;
DEFAULT_PALETTE:缺省调色板,该调色板由系统调色板中的静态色彩组成。
返回值:如果成功,返回值标识申请的逻辑对象,如果失败,返回值为NULL。
WindowsNT:若想获得更多错误信息,请调用GetLastError函数。
注释:仅在CS_HREDRAW和CS_UREDRAW风格的窗口中使用DKGRAY_BRUSH、GRAY_BRUSH和LTGRAY_BRUSH对象。
如果在其他风格的窗口中使灰色画笔,可能导致在窗口移动或改变大小之后出现画笔模式错位现象,原始储存画笔不能被调整。
HOLLOW_BRUSH和NULL_BRUSH储存对象相等。
由DEFAULT_GUI_FONT储存对象使用的字体将改变。当想使用菜单、对话框和其他用户界面对象使用的字体时请使用此储存对象。
不必要通过调用DeleteObject函数来删除储存对象。