勇芳软件工作室.汉化:  Printing > Print Spooler API > Print Spooler API Reference > Print Spooler API Functions >

DocumentEvent (Vista)

Previous pageReturn to chapter overviewNext page

描述

 

DocumentEvent函数是与打印文档相关的事件的事件处理程序。

 

C++ 语法

 

HRESULT DocumentEvent(

__in  HANDLE hPrinter,

__in  HDC hdc,

__in  INT iEsc,

__in  ULONG cbIn,

__in  PVOID pvIn,

__in  ULONG cbOut,

__out PVOID pvOut

);

 

PowerBASIC 语法

 

FUNCTION DocumentEventA ( _

BYVAL hPrinter AS DWORD, _

BYVAL hdc AS DWORD, _

BYVAL iEsc AS LONG, _

BYVAL cbIn AS DWORD, _

BYREF pvIn AS ANY, _

BYVAL cbOut AS DWORD, _

BYREF pvOut AS ANY _

) AS LONG

 

Unicode版本:

 

FUNCTION DocumentEventW ( _

BYVAL hPrinter AS DWORD, _

BYVAL hdc AS DWORD, _

BYVAL iEsc AS LONG, _

BYVAL cbIn AS DWORD, _

BYREF pvIn AS ANY, _

BYVAL cbOut AS DWORD, _

BYREF pvOut AS ANY _

) AS LONG

 

参数

 

hPrinter

 

[in]打印机对象的句柄。使用OpenPrinterAddPrinter功能检索打印机句柄。

 

hdc

 

[in]由CreateDC的调用生成的设备上下文句柄。如果IESC设置为DOCUMENTEVENT_CREATEDCPRE,则为零。有关从64位版本的Windows上的32位应用程序打印的限制,请参阅备注。

 

iEsc

 

[in]用于标识要处理的事件的转义代码。此参数可以是以下整数常量之一。

 

iEsc不变

事件

DOCUMENTEVENT_ABORTDOC

GDI即将处理对其AbortDoc函数的调用。

DOCUMENTEVENT_CREATEDCPOST

GDI刚刚处理了对其CreateDCCreateIC函数的调用。

除非已经将IESC设置为DOCUMENTEVENT_CREATEDCPRE的DocumentEvent先前调用,否则不应使用该转义码。

DOCUMENTEVENT_CREATEDCPRE

GDI即将处理其CreateDCCreateIC函数的调用。

DOCUMENTEVENT_DELETEDC

GDI即将处理对其DeleteDC函数的调用。

DOCUMENTEVENT_ENDDOCPOST

GDI刚刚处理了对其EndDoc函数的调用。

DOCUMENTEVENT_ENDDOCPRE

or DOCUMENTEVENT_ENDDOC

GDI即将处理对其EndDoc函数的调用。

DOCUMENTEVENT_ENDPAGE

GDI即将处理对其EndPage函数的调用。

DOCUMENTEVENT_ESCAPE

GDI即将处理对其ExtEscape函数的调用。

DOCUMENTEVENT_QUERYFILTER

DOCUMENTEVENT_QUERYFILTER事件代表后台处理程序向驱动程序查询驱动程序响应的DOCUMENTEVENT_ XXX事件的列表的机会。此事件是在通过DOCUMENTEVENT_CREATEDCPRE事件的DocumentEvent之前发出的。

DOCUMENTEVENT_RESETDCPOST

GDI刚刚处理了对其ResetDC函数的调用。

除非已经将IESC设置为DOCUMENTEVENT_RESETDCPRE的DocumentEvent先前的调用,否则不应使用该转义码。

DOCUMENTEVENT_RESETDCPRE

GDI即将处理对其ResetDC函数的调用。

DOCUMENTEVENT_STARTDOCPOST

GDI刚刚处理了对其StartDoc函数的调用。

DOCUMENTEVENT_STARTDOCPRE

or DOCUMENTEVENT_STARTDOC

GDI即将处理对其StartDoc函数的调用。

DOCUMENTEVENT_STARTPAGE

GDI即将处理对其StartPage函数的调用。

 

cbIn

 

[in]PVIN指向的缓冲区的大小(以字节为单位)。

 

iEsc不变

pvin内容

DOCUMENTEVENT_ABORTDOC

不曾用过。

DOCUMENTEVENT_CREATEDCPOST

PVIN包含上一次调用此函数的DEVMODE参数中指定的DEVMODE结构的指针的地址,IESC参数设置为DOCUMENTEVENT_CREATEDCPRE。

DOCUMENTEVENT_CREATEDCPRE

PVIN??指向Windows驱动程序开发工具包中记录的DOCEVENT_CREATEDCPRE结构。

DOCUMENTEVENT_DELETEDC

不曾用过。

DOCUMENTEVENT_ENDDOCPOST

不曾用过。

DOCUMENTEVENT_ENDDOCPRE

or DOCUMENTEVENT_ENDDOC

不曾用过。

DOCUMENTEVENT_ENDPAGE

不曾用过。

DOCUMENTEVENT_ESCAPE

PVIN指向Windows驱动程序开发工具包中记录的DOCEVENT_ESCAPE结构。

DOCUMENTEVENT_QUERYFILTER

与DOCUMENTEVENT_CREATEDCPRE相同。

DOCUMENTEVENT_RESETDCPOST

PVIN包含上一次调用此函数的DEVMODE参数中指定的DEVMODE结构的指针地址,{98979699}参数设置为DOCUMENTEVENT_RESETDCPRE。

DOCUMENTEVENT_RESETDCPRE

PVIN包含由ResetDC的呼叫者提供的DEVMODE结构的指针的地址。

DOCUMENTEVENT_STARTDOCPOST

PVIN指向一个LONG,指定由StartDoc返回的打印作业标识符。

DOCUMENTEVENT_STARTDOCPRE

or DOCUMENTEVENT_STARTDOC

PVIN包含由StartDoc的调用者提供的DOCINFO结构的指针的地址。

DOCUMENTEVENT_STARTPAGE

不曾用过。

 

cbOut

 

含义

如果IESC

DOCUMENTEVENT_QUERYFILTER:

指向pvOut的缓冲区指针的大小(以字节为单位)。

如果IESC

DOCUMENTEVENT_ESCAPE:

用作ExtEscapecbOutput参数的值。

对于所有其他IESC值:

IESC未使用。

 

pvOut

 

[out]指向缓冲区的指针。缓冲区的内容取决于IESC提供的值,如下表所示。

 

iEsc不变

pvOut内容

DOCUMENTEVENT_CREATEDCPRE

指向驱动程序提供的DEVMODE结构的指针,GDI使用而不是由CreateDC调用者提供的结构。(如果为空,则GDI使用调用者提供的结构。)

DOCUMENTEVENT_ESCAPE

指向缓冲区的指针,用作ExtEscapelpszOutData参数。

DOCUMENTEVENT_QUERYFILTER

指向缓冲区的指针,其中包含Windows驱动程序开发工具包中记录的DOCEVENT_FILTER结构。

DOCUMENTEVENT_RESETDCPRE

指向驱动程序提供的DEVMODE结构的指针,GDI使用而不是由ResetDC调用者提供的结构。(如果为空,则GDI使用调用者提供的结构。)

所有其他IESC

不曾用过。

 

返回值

 

函数的返回值取决于iEsc提供的转义。对于某些转义码,不使用返回值(见下文)。如果函数提供返回值,它必须是以下之一:

 

返回值

含义

DOCUMENTEVENT_FAILURE

驱动程序支持IESC标识的转义代码,但发生故障。

DOCUMENTEVENT_SUCCESS

驱动程序成功处理了由IESC标识的转义码。

DOCUMENTEVENT_UNSUPPORTED

司机不支持IESC标识的转义码。

 

以下列表显示哪些转义代码需要返回值,哪些不需要,并解释DOCUMENTEVENT_SUCCESS,DOCUMENTEVENT_FAILURE和DOCUMENTEVENT_UNSUPPORTED返回码的含义。

 

 

返回值

含义

DOCUMENTEVENT_ABORTDOC

返回值不被使用,不应该被读取。

DOCUMENTEVENT_CREATEDCPOST

返回值不被使用,不应该被读取。

DOCUMENTEVENT_CREATEDCPRE

DOCUMENTEVENT_FAILURE - GDI不会创建设备上下文或信息上下文,并为CreateDCCreateIC提供返回值0。

DOCUMENTEVENT_DELETEDC

返回值不被使用,不应该被读取。

DOCUMENTEVENT_ENDDOCPOST

返回值不被使用,不应该被读取。

DOCUMENTEVENT_ENDDOCPRE

or DOCUMENTEVENT_ENDDOC

返回值不被使用,不应该被读取。

DOCUMENTEVENT_ENDPAGE

返回值不被使用,不应该被读取。

DOCUMENTEVENT_ESCAPE

返回值不被使用,不应该被读取。

DOCUMENTEVENT_QUERYFILTER

备注.

DOCUMENTEVENT_RESETDCPOST

返回值不被使用,不应该被读取。

DOCUMENTEVENT_RESETDCPRE

DOCUMENTEVENT_FAILURE - GDI不会重置设备上下文,并为ResetDC提供返回值0。

DOCUMENTEVENT_STARTDOCPOST

DOCUMENTEVENT_FAILURE - GDI调用AbortDoc停止文档,然后为StartDoc提供一个SP_ERROR的返回值。

DOCUMENTEVENT_STARTDOCPRE

or DOCUMENTEVENT_STARTDOC

DOCUMENTEVENT_FAILURE - GDI不启动文档,并为StartDoc提供了一个SP_ERROR的返回值。

DOCUMENTEVENT_STARTPAGE

DOCUMENTEVENT_FAILURE - GDI不启动页面,并为StartPage提供了一个SP_ERROR的返回值。

 

备注

 

对于DOCUMENTEVENT_QUERYFILTER的IESC值,后台处理程序可以通过两种方式解释由DocumentEvent返回的DOCUMENTEVENT_SUCCESS值,具体取决于驱动程序是否修改了DOCEVENT_FILTER结构的某些成员(Windows驱动程序开发工具包中已记录)。(pvOut参数指向此结构。)当假脱机程序为此类型的结构分配内存时,将将此结构的两个成员cElementsReturnedcElementsNeeded初始化为已知值。在DocumentEvent返回后,假脱机程序将确定这些成员的值是否已更改,并使用该信息来解释DocumentEvent返回值。下表总结了这种情况。

 

返回值: DOCUMENTEVENT_SUCCESS

cElementsReturned和cElementsNeeded的状态:驱动程序没有更改任何一个成员。

含义:假脱机程序将此返回值解释为等同于DOCUMENTEVENT_UNSUPPORTED。

假脱机程序无法从驱动程序中检索事件过滤器,因此它仍然会调用DocumentEvent以查找所有事件。

 

返回值: DOCUMENTEVENT_SUCCESS

cElementsReturned和cElementsNeeded的状态:驱动程序写入一个或两个成员。

含义:后台处理程序接受此返回值而无需解释。如果驱动程序只写入cElementsNeededcElementsReturned中的一个,则假脱机程序会将未更改的成员视为零值。

后台处理程序会过滤出DOCEVENT_FILTER的aDocEventCall成员(Windows驱动程序开发工具包中记录的)中列出的所有事件。

 

返回值: DOCUMENTEVENT_UNSUPPORTED

cElementsReturned和cElementsNeeded的状态:不适用

含义:驱动程序不支持DOCUMENTEVENT_QUERYFILTER。

假脱机程序无法从驱动程序中检索事件过滤器,因此它仍然会调用DocumentEvent以查找所有事件。

 

返回值: DOCUMENTEVENT_FAILURE

cElementsReturned和cElementsNeeded的状态:不适用

含义:驱动程序支持DOCUMENTEVENT_QUERYFILTER,但遇到内部错误。

假脱机程序无法从驱动程序中检索事件过滤器,因此它仍然会调用DocumentEvent以查找所有事件。

 

如果IESC参数中提供的转义代码为DOCUMENTEVENT_CREATEDCPRE,则适用以下规则:

 

·如果作业直接发送到打印机而无需假脱机,PVIN.pszDevice指向打印机名称。(有关详细信息,请参阅Windows驱动程序开发工具包中DOCEVENT_CREATEDCPRE结构的文档。)
·如果作业正在假脱机,PVIN.pszDevice指向打印机端口名称。

 

注意 在64位版本的Windows上运行32位应用程序时,适用以下限制。DocumentEvent应该调用的唯一GDI函数是ExtEscape,只能使用私有转义。DocumentEvent对其他GDI函数的调用可能会产生未定义的行为。

 

引用文件 #INCLUDE Once

 

WinSpool.inc(包括Windows.inc)