写windows图形编程总结介绍
windows图形编程第二章
这一章主要是在整体上对windows图形程序进行的整体介绍,感觉作者还是比较喜欢在底层对图形进行一些解释,而且,可能是在惠普打印机做的比较久了,所以很多情况下是对打印机为例子进行的阐述,而这章我觉得最大的收获就是对打印机驱动程序和图形引擎之间的关系和微软对打印机驱动实现的基本方法了,首先
Windows 2000打印机驱动程序具有如下责任:
■通过提供GDI不能支持的特定打印机的绘制能力来帮助GDI绘制打印作业。
■发送绘制的图像数据流到打印假脱机。
■提供一个与打印机及打印文档相关的可修改配置参数的用户接口,如选择的输入输出的托架、打印的份数、图像的精度及方向等等。
微软操作系统一起发布的打印机驱动程序:
■微软统一打印机驱动程序
■微软Postscript打印机驱动程序
■微软绘图仪打印机驱动程序
所以这些打印机程序提供的驱动程序的函数接口(主要包括打印机图形DLL和打印机接口DLL)
打印机图形DLL实现了在第一部分的第3章支持DDI中描述的Drv为前辍的DDI函数。这些DLL具有以下列两项责任:
■帮助GDI绘制打印作业:一个打印机图形DLL可以支持DDI绘制函数来处理那些必须以特定设备的方式执行以及那些不能由GDI的绘制引擎完成的绘制操作。
■发送绘制数据流到假脱机:打印机图形DLL通常以RAW数据类型(包括命令序列)产生一个输出流,假脱机可以通过打印监视器将它发送到打印机硬件。
DrvEnableDriver
允许驱动程序初始化它自身并返回支持DDI函数的指针
DrvCompletePDEV
对一个设备实例提供具有GDI句柄的驱动程序
DrvDisableDriver
(可选)允许驱动程序在卸载之前执行清除工作
DrvDisablePDEV
允许驱动程序删除设备特定实例的信息
DrvDisableSurface
允许驱动程序删除绘制表面
DrvEnablePDEV
允许驱动程序提供具有物理设备特征的GDI并初始化设备特定实例的信息
DrvEnableSurface
允许驱动程序创建绘制表面
DrvQueryDeviceSupport
(可选)返回被请求的特定设备的信息
DrvQuery
(可选)返回被请求的特定驱动程序的信息
打印机图形DLL也对定义以下特定打印的DDI函数负责,它们在绘制打印作业过程中的某一特定点时被调用。
函数 何时调用
DrvEndDoc
当GDI已经结束发送一个文档到驱动程序以备绘制时
DrvNextBand
(可选)当GDI已经结束绘制一个物理页面的一个区带(band),这样驱动程序可以将该区发送到打印机
DrvQueryPerBandInfo
(可选)在GDI开始为一个物理页面绘制区带之前,这样驱动程序可以提供具有特定区带信息的GDI。
DrvSendPage
当GDI已经结束绘制物理页面,这样驱动程序可以将此页面发送到打印机。
DrvStartBanding
(可选)当GDI准备绘制时开始发送一个物理页面的区带信息到驱动程序
DrvStartDoc
当GDI准备绘制时开始发送一个文档到驱动程序
DrvStartPage
当GDI准备绘制时开始发送一个文档页到驱动程序
一个绘制表面已经创建并且绘制可以开始,对每一个绘制的文档来说,GDI在打印机图形DLL中调用以下的函数:
l DrvStartDoc
For each physical page{
l DrvStartPage
DrStartBanding
For each banding surface{
DrvQueryPerbandInfo
Rendering operations
DrvNextBand
}
DrvSendPage
}
l DrvendDoc
打印机接口DLL
打印机通常给用户提供大量的可修改配置的选择,这些选择项可以在每一个被付印的文档中被改变。如页面、托架、字体选择、图像精度、尺寸、色彩等等都必须可以通过用户接口被存取,也可以被应用程序调用。
一个打印机驱动程序的打印机接口DLL,它是执行在用户模式下,负责导出一个用户的接口到打印机的配置选项。提供这一接口包括为打印机创建原型表单页面。应用程序(如打印折叠器)通过调用由打印假脱机导出的Win32函数显示接口,并且,假脱机返过来,又调用由打印机接口DLL定义的函数。
为配置选项提供一个用户接口不是打印机接口DLL的唯一责任,DLL同时也导出假脱机可以调用的函数以通知驱动程序打印相关的系统事件,如驱动程序安装、升级或者添加打印机及打印机连接等。
对这部分书中介绍的不是很多,主要是我在网上找的一些资料
就总结到这吧,对这些驱动方面的东西,由于以前也没有接触过,所以只能是在理论上进行一些了解,对于具体实现也是请教别人,有点类似java虚拟机的实现,提供一些接口,而硬件厂商则按照各自函数实现自己硬件的驱动程序,然后驱动和图形引擎相结合,实现了图形在底层的实现方式,对这,我也只是大概了了解一点,确切的说感觉也是了解的比较朦胧的,毕竟没有自己编写过驱动程序嘛,不过按照个人体会总结这,也算是一个入门了,希望对今后学习和一些和我一样热爱编程的小菜鸟们能有所帮助,我也会继续努力的,感觉除了程序会死心塌地的陪着我,其他的都有可能离开我了,这些都以后再说了,就到这了。
本文地址:http://www.45fan.com/dnjc/70067.html