win32(6)--GDI绘图基础
来源:互联网 发布:广联达破解软件下载 编辑:程序博客网 时间:2024/05/16 04:35
GDI概念:(图形设备接口Graphics Device Interface)
GDI是图形设备接口,微软设计的一套API,负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。GDI的出现使程序员无需关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,方便了开发工作。
GDI的特点:
- 不允许程序直接访问物理显示硬件,通过称为“设备环境”的抽象接口间接访问显示硬件;
- 程序需要与显示硬件(显示器、打印机等) 进行通讯时,必须首先获得与特定窗口相关联的设备环境;
- 用户无需关心具体的物理设备类型;
- Windows参考设备环境的数据结构完成数据的输出。
设备环境:(DC:Device Context)
简称DC,也叫做设备上下文,设备描述表。DC就是程序可以进行绘图的地方。例如我们要在屏幕上绘图,设备就是屏幕,DC就是屏幕上的绘图层。
设备句柄:设备上下文句柄,设备环境句柄,简称HDC。如果需要绘图,首先得得到句柄,绘图完成之后必须释放句柄。
获取HDC的几个方法:
- 在WM_PAINT消息处理里面,使用PAINTSTRUCT ps={0}; HDC hdc= BeginPaint(hWnd,&ps); 这里处理绘图; EndPaint(hWnd,&ps);
- HDC hdc=GetDC(hWnd); 这里处理绘图; ReleaseDC(hWnd,hdc);
- HDC hdc=CreateDC…; 这里处理绘图 ;DeleteDC(hdc);
颜色:RGB
计算机三原色:红(R)、绿(G)、蓝(B)
COLORREF :DWORD — unsigned long类型,0x00BBGGRR
COLORREF color = RGB(255,0,0); //红色
BYTE — unsigned char
BYTE byRed = GetRValue(color); //获取红色分量
BYTE byGreen = GetGValue(color); //获取绿色分量
BYTE byBlue = GetBValue(color); //获取蓝色分量
画笔和画刷:
在绘图的时候,比如我们要画点、画线、画矩形、画圆,画笔决定了线型、线宽、颜色;画刷决定了在画封闭区域的时候,区域内部如何填充。
画笔:HPEN
1、创建画笔:
HPEN WINAPI CreatePen( int iStyle, int cWidth, COLORREF color);
参数iStyle:PS_SOLID实线、PS_DASH虚线、PS_DOT点线、PS_DASHDOT点划线、PS_DASHDOTDOT 双点划线、PS_NULL不可见。除PS_SOLID可通过cWidth指定线宽外,其它线型只支持一像素线宽,若cWidth>1,则按一律按实线画。
2、将画笔应用到设备上下文(DC)中:
HGDIOBJ WINAPI SelectObject(HDC hdc, HGDIOBJ h);
返回值:成功将返回原GDI对象句柄,失败返回NULL。
3、恢复原画笔
以第一次调用SelectObject函数的返回值作为参数再次调用该函数。因为windows默认有个黑色的实线画笔,所以,我们即使不设置自己的画笔,也是可以使用系统默认画笔的,我们使用完自己的画笔以后,一般需要将画笔设置为原先的系统默认画笔。
4、释放画笔
BOOL WINAPI DeleteObject( HGDIOBJ ho);
注意:不能删除设备上下文正在使用的GDI对象,因此必须先恢复原画笔,再删除新画笔。
画刷:HBRUSH
1、创建单色画刷
HBRUSH WINAPI CreateSolidBrush(COLORREF color);
2、创建阴影线画刷
HBRUSH WINAPI CreateHatchBrush( int iHatch, COLORREF color);
HS_HORIZONTAL 水平阴影(-) HS_VERTICAL垂直阴影(|) HS_CROSS正交阴影(+)
HS_BDIAGONAL 正斜阴影(/) HS_FDIAGONAL 反斜阴影(\) HS_DIAGCROSS 斜交阴影(X)
3、创建位图画刷
HBRUSH WINAPI CreatePatternBrush( HBITMAP hbm);
4、将画刷应用到DC,恢复原画刷、释放画刷,与画笔完全一样。SelectObject,DeleteObject。
获取系统对象:GetStockObject
对于画笔、画刷,Windows系统提供了一些已经创建好的,这些获取以后,不需要释放。
HGDIOBJ WINAPI GetStockObject( int i);
参数i:HOLLOW_BRUSH、NULL_BRUSH、BLACK_BRUSH、WHITE_BRUSH、NULL_PEN、BLACK_PEN、WHITE_PEN等等。
- win32(6)--GDI绘图基础
- [win32] GDI绘图技术
- MFC GDI绘图基础
- MFC GDI绘图基础
- MFC GDI绘图基础
- MFC GDI绘图基础
- MFC GDI绘图基础
- (win32)GDI基础
- win32绘图基础
- 绘图基础1--GDI介绍
- <Win32 API> GDI和GDI+ 双缓冲模式绘图
- Win32 GDI基础(笔记)
- Win32 GDI基础(笔记)
- [win32] GDI绘图常用的三种坐标系
- 【win32】day07-图形绘制/GDI绘图对象-画笔/画刷
- win32窗口的创建,GDI简单的绘图操作
- 第五章 绘图基础 ( GDI映射模式 )
- GDI基础介绍之几何绘图
- [JAVA学习笔记-97]ActiveObject模式的Scheduler的关键实现
- Java动态代理的两种实现方法
- HDU3829 (9/600)
- 求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case和条件语句
- Spring jdbcTemplate 的测试 --(三)
- win32(6)--GDI绘图基础
- self类本身
- hadoop-HA集群搭建,启动DataNode,检测启动状态,执行HDFS命令,启动YARN,HDFS权限配置,C++客户端编程,常见错误
- PHP特性整合 php7特性
- Java入门备忘录
- 文件IO操作大全
- windows下安装tensorflow:spyder点不开,没反应
- Bootstrap基础
- 高效率php写法