Escape功能允许应用程序访问不能通过GDI直接使用的特定设备的功能。由应用程序进行的Escape呼叫转换并发送给驱动程序。
int Escape(
HDC 【HDC】, | //处理设备上下文 |
INT 【nEscape】, | //转义功能 |
INT 【cbInput】, | //输入结构中的字节数 |
LPCSTR 【lpvInData】, | //指向输入结构的指针 |
LPVOID 【lpvOutData】 | //指向输出结构的指针 |
); |
参数
【HDC】
标识设备上下文。
【nEscape】
指定要执行的转义函数。此参数必须是预定义的转义值之一。如果应用程序定义私有转义值,请使用ExtEscape函数。
【cbInput】
指定【lpvInData】参数指向的数据的字节数。
【lpvInData】
指向指定转义所需的输入结构。
【lpvOutData】
指向从该转义接收输出的结构。如果没有返回数据,此参数应为NULL。
返回值
如果函数成功,则返回值大于零,但QUERYESCSUPPORT打印机转义除外,仅检查实现。如果没有实现转义,返回值为零。
如果函数失败,返回值是一个错误。要获取扩展错误信息,请调用GetLastError.
错误
如果函数失败,则返回值为以下值之一。
值 | 含义 |
SP_ERROR | 一般错误。如果返回SP_ERROR,逃逸可能会将最后一个错误代码设置为: ERROR_INVALID_PARAMETER |
SP_OUTOFDISK | 当前没有足够的磁盘空间用于假脱机,并且没有更多的空间可用。 |
SP_OUTOFMEMORY | 没有足够的内存可用于假脱机。 |
SP_USERABORT | 用户通过Windows打印管理器终止作业。 |
备注
Win32 API提供了六个新功能,可以取代一些打印机转义:
功能 | 描述 |
AbortDoc | 终止打印作业。取代了ABORTDOC逃逸。 |
EndDoc | 结束打印作业。取代ENDDOC转义。 |
EndPage | 结束页面取代NEWFRAME逃生。与NEWFRAME不同,打印页面后始终会调用此函数。 |
SetAbortProc | 设置打印作业的中止功能。取代SETABORTPROC转义。 |
StartDoc | 开始打印作业。取代STARTDOC转义。 |
StartPage | 准备打印机驱动程序接收数据。 |
Win32 API为GetDeviceCaps功能提供了六个新的索引,取代了一些打印机转义:
指数 | 描述 |
PHYSICALWIDTH | 对于打印设备:物理页面的宽度,以设备为单位。例如,设置为以8.5“x11”纸张上的600 dpi打印的打印机的物理宽度值为5100设备单位。请注意,物理页面几乎总是大于页面的可打印区域,并且从不更小。 |
PHYSICALHEIGHT | 对于打印设备:物理页面的高度,以设备为单位。例如,设置为以8.5“x11”纸张上的600 dpi打印的打印机的物理高度值为6600个设备单位。请注意,物理页面几乎总是大于页面的可打印区域,并且从不更小。 |
PHYSICALOFFSETX | 对于打印设备:以物理页面的左边缘到可打印区域的左边缘的距离,以设备为单位。例如,设置为以最大0.25“纸张打印的8.5”x11“纸张上的600 dpi打印的打印机的水平物理偏移量为150个设备单位。 |
PHYSICALOFFSETY | 对于打印设备:以物理页面的顶部边缘到可打印区域的顶部边缘的距离,以设备为单位。例如,设置为以最大0.5“纸张打印的8.5”x11“纸张上的600 dpi打印的打印机的垂直物理偏移量为300个设备单位。 |
在原始打印机转义中,基于Win32的应用程序只能使用以下内容:
逃逸 | 描述 |
QUERYYESCSUPPORT | 确定设备驱动程序是否实现特定的转义。 |
以下是仅适用于16位版本Windows的过时打印机转义列表:
逃逸 | 描述 |
ABORTDOC | 停止当前打印作业,并擦除应用程序自上次ENDDOC转义以来写入设备的所有内容。 |
ENDDOC | 结束STARTDOC转义启动的打印作业。 |
GETPHYSPAGESIZE | 检索物理页面大小并将其复制到指定的位置。 |
GETPRINTINGOFFSET | 从实际打印或绘图开始的物理页面的左上角检索偏移量。 |
GETSCALINGFACTOR | 检索打印机的x轴和y轴的缩放因子。 |
NEWFRAME | 通知打印机应用程序已完成写入页面。 |
NEXTBAND | 通知打印机应用程序已完成写入频带。 |
PASSTHROUGH | 允许应用程序直接将数据发送到打印机。 |
SETABORTPROC | 设置打印作业的中止功能。 |
STARTDOC | 通知打印机驱动程序新的打印作业正在启动。 |
也可以看看
AbortDoc, EndDoc, EndPage, ExtEscape, SetAbortProc, StartDoc, StartPage, ResetDC