windows基础应用程序编程(三):GDI简介

    GDI即Graphics Device Interface图形设备接口,计算机的输出设备是由很大的不同的。即使仅对于显示器而言也存在着不同大小的尺寸等等区别。那么为了屏蔽这些区别所造成的程序编写内容的不同。于是,这个东西就诞生了,我们可以利用这个统一的接口,利用GDI为我们提供的绘图函数,来输出我们程序所要求的输出结果。

设备描述表

    GDI中有一个很重要的概念,我们称之为设备描述表,简称为DC。实际上它是GDI内部所保存的一个数据结构,DC与特定的输出设备有关系。我们可以把它理解成沟通我们程序与具体的显示设备之间的桥梁。当我们需要在一个输出设备上输出图形时,我们首先必须要获得一个设备描述表的句柄。(还记得句柄就是一个数值,简答的用于标识windows中的某些东西吗?)当这个句柄返回给程序时,Windows函数就给了我们使用输出设备的权限。
那么我们该如何去获得这个设备描述表的句柄呢,一般来说,常见的获得设备描述表的方法有两种。(当然实际不止两种,我们这里仅介绍最常用的。)

第一种方法

    通过我们上一篇文章的学习,我们了解到了WM_PAINT消息是“需要回复以前窗口时”即重画窗口时,所产生的消息。那么既然要重画窗口,根据之前所讲的,如果要在窗口上绘制,那么首先我们必须要获得一个设备描述表句柄,那么在处理WM_PAINT消息中,我们在哪里看到获取到设备描述表句柄了呢?还记得上一篇文章中在介绍WM_PAINT消息一般的处理过程时的内容吗?可能大家已经猜到了,是的,我们通过BeginPaint函数就可以或得一个设备描述表句柄。我们首先来看看这个函数的原型。
HDC BeginPaint( HWND hwnd, LPPAINTSTRUCT lpPaint );

    第一个参数是要重画窗口的句柄,第二个参数是一个指向PAINTSTRUCT结构体的一个指针。返回值为HDC类型,即DC句柄。
我们不妨在看一下PAINTSTRUCT结构的定义:
typedef struct tagPAINTSTRUCT {
     HDC hdc;
     BOOL fErase;
     RECT rcPaint;
     BOOL fRestore;
     BOOL fIncUpdate;
     BYTE rgbReserved[32];
}PAINTSTRUCT;

    第一个参数是DC的句柄,第二个参数表示背景是否需要被擦除。如果为TRUE则背景需要擦除,否则不擦出背景。第三个参数为一个RECT结构体的变量,RECT结构体是一个矩形的结构体定义,存储了一个矩形的左上角点的坐标和右下角点的坐标。这里它表示了需要重绘的矩形。(windows一般不需要对整个客户区进行重绘,如果客户区只是部分被遮挡,那么只需要重绘被遮挡的部分。)至于后三个参数是系统保留的,在系统内部被使用,这里不再解释。
    大家需要注意的是,lpPaint是一个输出参数,也就是说我们不需要自己去定义这个结构体的各个值,它是由程序自动来填入的。
在获得一个设备描述表句柄之后,我们就可以调用GDI为我们提供的大量绘图函数来对输入设备进行绘制了。一般来讲,这个获得的设备描述表句柄被当做GDI绘图函数的第一个参数。
在绘制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值