之前的一篇文章里,我简单概要的介绍了一下界面库的知识。既然是跟界面有关,那么必然少不了很多关于绘制的内容。对于Windows开发而言,界面绘制使用的一类API就是所谓的“GDI”。
GDI这个东西可有历史了,但是我们就不去追根朔源了。首先,我不能免俗的要先介绍一下它的全称:“Graphic Device Interface”,即“图形设备接口”,从这个名称我们可以大略吸收到的信息就是:GDI是个跟图形绘制有关的接口,对的,正是这样!
先让我们来看看GDI函数大致包括了哪些内容,哪些分类,因为我的这系列文章偏实用而且希望能给想进入Windows开发的程序员们提供一些捷径,所以我不做过多的理论陈述,而是打算重点介绍API的使用方法以及一些基本功能应该如何实现,当然还包括在实际开发过程中可能会遇到的坑,如何避免这些坑,还有如何提高绘制效率,如何让界面的各种行为变的流畅。
首先来介绍一下:“DC”,DC就是“设备上下文”,初学者不要去硬抠这个词的字面含义作何解释,你需要知道的是所谓设备上下文实际是一种抽象,那么它抽象出了什么呢?答案是:设备上下文抽象出了绘制设备,包括打印机,显示器等等,对于我们Windows开发人员而言,我们不需要去关注特定的绘制设备如何通信,如何调用最底层的接口来复杂的在设备上进行绘制,有了设备上下文,一切都变的透明,高效,简单。当然,在GDI上一层还有更高层的抽象,绘制更为简单,但是对于我们Windows
C++开发人员而言,那不是我们立刻需要知道的东西。我们所有对绘制设备的绘制行为,都是通过设备上下文进行的。
DC在Windows程序中的表现形式,是一个被称作“设备上下文句柄”的东西,也即HDC,HDC在代码中是一种数据类型,它是一个32位的值。我们可以通过创建一个设备上下文句柄,也即HDC类型的对象来获取对绘制设备的抽象,之后所有的绘制操作都是施加于这个HDC之上,也就是对应的设备上。也就是说,如果你的HDC代表你的当前显示区域,那么调用一个GDI函数画一条线,这条线就会出现在你的屏幕上。而如果HDC代表的是一台打印机,这条线就会绘制到打印机上,这样讲是否明白了呢?我用两段文字来解释DC和HDC,是因为这是GDI绘制图形的基础,如果没有DC和HDC,GDI的一切行为都无从谈起。
在介绍完设备上下文这个基础以后,我要讲讲GDI对象,就是说什么是GDI对象?GDI对象大概有哪些类型?每一种类型的GDI对象是做什么用的?
我这篇文章并不想写的大而全,因而我只罗列一下常见的GDI对象,比如:
Bitmap
位图对象,表征了一副位图,在内存中的组织实际是一个二进制矩阵,标识了位图每个点的位置以及相应的色彩。代码中位图用HBITMAP,即位图句柄来表示。
Font
字体对象,代表了设备上下文中的字体属性,什么字体?多大的字体?是否带下划线?是否粗体“。代码中用HFONT,字体句柄表示。
Brush
画刷对象,代表了图形的填充色,代码中用HBRUSH表示。
Pen
画笔对象,代表了线条绘制的颜色以及字体的颜色,用HPEN表示。
我们可以看出,所谓的GDI对象,实际上是设备上下文的一些属性或者说参数,它们决定了最终的绘制效果。
在介绍了这些基础概念之后,下篇文章我会把基本的GDI函数的使用方法简单介绍一下,当然,还是那些常用的,我还会说一下调用这些函数常见的容易出现的问题,如何应付以及避免这些问题。
OK!