描述
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]打印机对象的句柄。使用OpenPrinter或AddPrinter功能检索打印机句柄。
hdc
[in]由CreateDC的调用生成的设备上下文句柄。如果IESC设置为DOCUMENTEVENT_CREATEDCPRE,则为零。有关从64位版本的Windows上的32位应用程序打印的限制,请参阅备注。
iEsc
[in]用于标识要处理的事件的转义代码。此参数可以是以下整数常量之一。
iEsc不变 |
事件 |
DOCUMENTEVENT_ABORTDOC |
GDI即将处理对其AbortDoc函数的调用。 |
DOCUMENTEVENT_CREATEDCPOST |
GDI刚刚处理了对其CreateDC或CreateIC函数的调用。 除非已经将IESC设置为DOCUMENTEVENT_CREATEDCPRE的DocumentEvent先前调用,否则不应使用该转义码。 |
DOCUMENTEVENT_CREATEDCPRE |
GDI即将处理其CreateDC或CreateIC函数的调用。 |
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: |
用作ExtEscape的cbOutput参数的值。 |
对于所有其他IESC值: |
IESC未使用。 |
pvOut
[out]指向缓冲区的指针。缓冲区的内容取决于IESC提供的值,如下表所示。
iEsc不变 |
pvOut内容 |
DOCUMENTEVENT_CREATEDCPRE |
指向驱动程序提供的DEVMODE结构的指针,GDI使用而不是由CreateDC调用者提供的结构。(如果为空,则GDI使用调用者提供的结构。) |
DOCUMENTEVENT_ESCAPE |
指向缓冲区的指针,用作ExtEscape的lpszOutData参数。 |
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不会创建设备上下文或信息上下文,并为CreateDC或CreateIC提供返回值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参数指向此结构。)当假脱机程序为此类型的结构分配内存时,将将此结构的两个成员cElementsReturned和cElementsNeeded初始化为已知值。在DocumentEvent返回后,假脱机程序将确定这些成员的值是否已更改,并使用该信息来解释DocumentEvent返回值。下表总结了这种情况。
返回值: DOCUMENTEVENT_SUCCESS
cElementsReturned和cElementsNeeded的状态:驱动程序没有更改任何一个成员。
含义:假脱机程序将此返回值解释为等同于DOCUMENTEVENT_UNSUPPORTED。
假脱机程序无法从驱动程序中检索事件过滤器,因此它仍然会调用DocumentEvent以查找所有事件。
返回值: DOCUMENTEVENT_SUCCESS
cElementsReturned和cElementsNeeded的状态:驱动程序写入一个或两个成员。
含义:后台处理程序接受此返回值而无需解释。如果驱动程序只写入cElementsNeeded和cElementsReturned中的一个,则假脱机程序会将未更改的成员视为零值。
后台处理程序会过滤出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)