windows编程 GDI

GDI

GDI:即图形设备接口,英文全称 Graphics Device Interface,简称GDI,GDI绘图效率低,是和Directx和openGL相比,

GDI+

GDI+ 由于是GDI基础上再次开发,比GDI高层,也就是距离底层远,执行效率低,GDI+不适合应用游戏

GDI特定

GDI 实现一套通用的图形对象,来向屏幕,内存甚至打印机进行绘图操作,GDI的特点:

  1. 不允许程序直接访问物理显示硬件,通过称为“设备环境”的抽象接口间接访问显示硬件
  2. 程序需要与显示硬件进行通讯时,必须首先获得与特定窗口相关联的设备环境
  3. 用户无需关系具体的物理设备类型
  4. windows参考设备环境的数据结构完成数据的输出

GDI中的基本图形

GDI中显示的“基本图形”:

  1. 直线和曲线:GID支持直线,矩形,椭圆等图形
  2. 填入区域:当一系列直线或者曲线封闭了一个区域,这个区域使用GID画刷对象进行填图
  3. 位图:位的矩形数组,位对应于显示设备上的像素,位映像图形的基础工具
  4. 文字
  5. 映像模式和变化
  6. 图元
  7. 绘图区域
  8. 路径
  9. 裁剪
  10. 调色盘
  11. 打印

GDI的函数分类

大体来看:GDI就是由几百个函数组成,那么它们的分类是:

  1. 取得和释放设备上下文的函数
  2. 取得有关设备上下文信息的函数
  3. 绘图函数
  4. 设定和取得设备上下文参数的函数
  5. 使用GDI对象的函数

设备环境DC

设备环境DC,DC就是程序可以进行绘图的地方,如果在屏幕上绘图,DC就是窗口上可以绘图的地方,系统中可以具有多个设备环境每个设备环境都有一个与之对应的关联设备;

如果将图形输出到特定的设备,只需要创建相应类型的设备句柄(HDC)就可,所以GDI绘图的时候,必须先取得设备环境的句柄,取得句柄的两种方式:

获得句柄的两种方式

第一种方法:需要在窗口过程函数处理WM_PAINT消息的case之后使用,在这里需要使用BeginPaint和EndPaint这两个函数

HDC BeginPaint(			// 它为指定的窗口进行绘图工作,并将绘图有关的信息填充到 PAINTSTRUCT结构中
    _In_ HWND hWnd,				//HWND 类型的hund,填写获取设备环境句柄的那个窗口句柄
    _Out_ LPPAINTSTRUCT lpPaint);//LPPAINTSTRUCT类型的lpPaint

对于结构体LPPAINTSTRUCT,这个结构体包含了用来绘制它所拥有的窗口客户区所需要的消息:

typedef struct tagPAINTSTRUCT {
    HDC         hdc;			//绘制的句柄			
    BOOL        fErase;			//非零擦除背景,否则不擦除
    RECT        rcPaint;		//制定左上角和右上角坐下确定矩形范围
    BOOL        fRestore;		
    BOOL        fIncUpdate;		
    BYTE        rgbReserved[32];	//系统预留	
} PAINTSTRUCT, *PPAINTSTRUCT, *NPPAINTSTRUCT, *LPPAINTSTRUCT;

对应BeginPaint的EndPaint函数,表示指定窗口的绘画过程结束:

BOOL EndPaint(
    _In_ HWND hWnd,			//被重画窗口的句柄
    _In_ CONST PAINTSTRUCT *lpPaint);	// BeginPaint中的结构体

ValidateRect函数。它用于更新指定窗口无效矩形的区域,使之有效

BOOL WINAPI ValidateRect(
    _In_opt_ HWND hWnd,	//标识想要修改状态的窗口,若为NULL,系统更新所有窗口
    _In_opt_ CONST RECT *lpRect);	// 指向有关包含需要生效的矩形更新区域坐标的RECT,为NULL,则客户区域将会生效

第二种方法:使用GetDC来获得句柄,调用GetDC后调用ReleaseDC对设备环境释放

HDC WINAPI GetDC(
    _In_opt_ HWND hWnd);	//窗口句柄,根据提供的窗口句柄返回对应窗口的设备上下文DC

与之对应的RealeaseDC,释放上下文的函数

int WINAPI ReleaseDC(
    _In_opt_ HWND hWnd,	 //指定释放设备上下环境所在窗口的句柄
    _In_ HDC hDC);		//指向要释放的设备上下文环境的句柄

一个GDI程序的通过框架

//-----------------------------------【程序说明】----------------------------------------------
//  程序名称::GDIdemoCore
//  描述:GDI基本几何绘图示例程序
//------------------------------------------------------------------------------------------------

//-----------------------------------【头文件包含部分】-----------------------
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值