Device Context 设备环境 设备上下文 理解

来源:互联网 发布:做软件测试好吗 编辑:程序博客网 时间:2024/05/10 01:12
 

在GDI中,DC(Device context)是一个非常重要的概念。

有的书中,将DC翻译为设备描述表(《Windows 程序设计 第五版》作者Charles Petzold),

也有的书将DC翻译为设备上下文。

到底什么是DC?

用现实中的例子来理解可能更容易些。

如果你喜欢画画,你得先准备了画布,画笔,颜料……

画画的环境搭建好了,你就可以画画了。

这个画画的环境,就是DC。

在图形环境下,一切都是画出来的,所以,你要准备好一个DC,才能在屏幕上画画。——写字也是画画。

在画画的环境中,有哪些对象呢?

画布——GDI对象之一:区域

画笔——GDI对象之一:画笔

颜料盒——GDI对象之一:调色板

如果要在画笔上写字的话,写什么样的字体呢?方正字体?徐静蕾字体?——字体也是GDI对象之一。

有的画笔比较粗,专用来刷大面积背景色的,这是刷子——GDI对象之一:刷子

如果你不想画了,只想把别人画好的画,贴到你的画布上,这也是可以的。——GDI对象之一:位图。

所以,这里就有6种GDI对象可以用于DC。

现在开始画画了,你拿起了一只笔。——在Windows环境里,这叫选择了一个画笔对象:使用SelectOBject函数。当然,如果你没带笔也没关系,Windows为你准备了几只画笔,你可以这样申请系统提供的缺省画笔:hPen = GetStockObject(WHITE_PEN);

如果你画着画着,觉得手中的笔用着不爽,可以换一只啊,没关系的。——依旧是SelectObject()换笔。

当然,如果你走出了画室,别完了把你的画笔清除掉,要不画室里全是笔啊,刷子啊,太乱了。——DeleteObject()

以上转自: http://hi.baidu.com/noscan/blog/item/4be8128be2f3c7d7fc1f1060.html

接下来是我个人的理解:

每一笔用GDI画的都通过它与设备交流最终画在屏幕上
不同屏幕/设备它不同,所以可以保证画出的效果相同,增加程序的可移植性
也就是GDI是画在DC上的,DC再显示在屏幕上
DC为GDI基础
通过GDI绘制出来时看不到的也就是不显示的,只在内存上的一副图片,这幅图可以通过DC绘制在设备上
有几种常见环境:
1)显示设备环境
主要用于显示设备上的绘制操作,当应用绘制客户区时,它需要调用BeginPaint、GetDC或GetDCEx函数获取显示设备上下文。绘制结束后,需要调用EndPaint或ReleaseDC函数释放它。
2)打印机设备环境
应用程序以合适的参数(如打印机驱动名、打印机名等)调用函数CreateDC,完成打印任务后,就会调用DeleteDC,以删除打印机设备上下文。
3)内存设备环境
主要为特定的设备存储位图,它支持在位图上进行绘制操作。通常通过调用CreateCompatibleDC来获取内存设备上下文,当系统处理这个调用时,它将在内存中创建一个和原始设备颜色格式兼容的位图。
内存设备上下文将系统内存用作显示表面,通常使用内存设备上下文预先在系统内存中绘制复杂的图形,然后再快速地将其复制到实际的设备上下文的显示表面上,而绘制图形的结果仍保存在内存设备上下文的DDB中。
4)信息设备环境
主要用于获取默认设备的数据。如调用函数CreateIC,以便为打印机的特定模型创建信息设备上下文,然后调用函数GetCurrentObject和GetObject来获取默认的画笔和画刷的属性。在使用完信息设备上下文之后,需调用DeleteDC以删除设备上下文。

设备描述表(DC)是Windows中的一种数据结构,它包含GDI需要的所有关于显示界面情况的描述字段,包括相连的物理设备和各种各样的状态信息。在Windows画图之前,Windows程序从GDI获取设备描述表句柄(HDC),并在每次调用完GDI输出函数后将句柄返回给GDI
GDI函数中使用该句柄的数据信息来在设备上下文环境中绘图
DC好比画图用的画纸,GDI就是画图时用的工具

原创粉丝点击