次の方法で共有


DrvDocumentEvent 関数 (winddiui.h)

プリンター インターフェイス DLL の DrvDocumentEvent 関数は、ドキュメントの印刷に関連する特定のイベントを処理できます。

構文

int DrvDocumentEvent(
        HANDLE hPrinter,
        HDC    hdc,
        int    iEsc,
        ULONG  cbIn,
  [in]  PVOID  pvIn,
        ULONG  cbOut,
  [out] PVOID  pvOut
);

パラメーター

hPrinter

呼び出し元が指定したプリンター ハンドル。

hdc

呼び出し元が指定したデバイス コンテキスト ハンドル。 CreateDC によって生成されます。 iEsc が DOCUMENTEVENT_CREATEDCPRE に設定されている場合、ゼロになります。 64 ビット バージョンの Windows での 32 ビット アプリケーションからの印刷に関する制限については、以下の 「備考 」セクションを参照してください。

iEsc

処理するイベントを識別する呼び出し元指定のエスケープ コード。

64 ビット バージョンの Windows での 32 ビット アプリケーションからの印刷に関する制限については、以下の 「備考 」セクションを参照してください。

このパラメーターには、次のいずれかの整数定数を指定できます。

iEsc 定数 イベント
DOCUMENTEVENT_ABORTDOC GDI では、 AbortDoc 関数の呼び出しを処理します。
DOCUMENTEVENT_CREATEDCPOST GDI は、 CreateDC または CreateIC 関数の呼び出しを処理したばかりです。 iEsc が DOCUMENTEVENT_CREATEDCPRE に設定された DrvDocumentEvent の以前の呼び出しがない限り、このエスケープ コードは使用しないでください。
DOCUMENTEVENT_CREATEDCPRE GDI は、 CreateDC または CreateIC 関数の呼び出しを処理します。
DOCUMENTEVENT_DELETEDC GDI は、 DeleteDC 関数の呼び出しを処理します。
DOCUMENTEVENT_ENDDOCPOST GDI は EndDoc 関数の呼び出しを処理したばかりです。
DOCUMENTEVENT_ENDDOCPREまたはDOCUMENTEVENT_ENDDOC GDI では、 EndDoc 関数の呼び出しを処理します。
DOCUMENTEVENT_ENDPAGE GDI では、 EndPage 関数の呼び出しを処理します。
DOCUMENTEVENT_ESCAPE GDI では、 ExtEscape 関数の呼び出しを処理します。
DOCUMENTEVENT_QUERYFILTER DOCUMENTEVENT_QUERYFILTER イベントは、ドライバーが応答するDOCUMENTEVENT_XXX イベントの一覧をドライバーに照会するスプーラーの機会を表します。 このイベントは、DOCUMENTEVENT_CREATEDCPRE イベントを渡す DrvDocumentEvent の呼び出しの直前に発行されます。
DOCUMENTEVENT_RESETDCPOST GDI は ResetDC 関数の呼び出しを処理したばかりです。 iEsc を DOCUMENTEVENT_RESETDCPRE に設定した DrvDocumentEvent の以前の呼び出しがない限り、このエスケープ コードは使用しないでください。
DOCUMENTEVENT_RESETDCPRE GDI は、 ResetDC 関数の呼び出しを処理します。
DOCUMENTEVENT_STARTDOCPOST GDI は、 StartDoc 関数の呼び出しを処理したばかりです。
DOCUMENTEVENT_STARTDOCPREまたはDOCUMENTEVENT_STARTDOC GDI では、 StartDoc 関数の呼び出しを処理します。
DOCUMENTEVENT_STARTPAGE GDI では、 StartPage 関数の呼び出しを処理します。

cbIn

pvIn が指すバッファーの呼び出し元が指定したサイズ (バイト単位)。

[in] pvIn

呼び出し元が指定したポインター。の使用は、 次のように iEsc に指定された値に依存します。

iEsc 定数 pvIn コンテンツ
DOCUMENTEVENT_ABORTDOC 使用されていません。
DOCUMENTEVENT_CREATEDCPOST pvIn には、この関数の以前の呼び出しで pvOut パラメーターで指定された DEVMODEW 構造体へのポインターのアドレスが含まれ、iEsc パラメーターが DOCUMENTEVENT_CREATEDCPRE に設定されていました。
DOCUMENTEVENT_CREATEDCPRE pvIn は、DOCEVENT_CREATEDCPRE構造体を指します。
DOCUMENTEVENT_DELETEDC 使用されていません。
DOCUMENTEVENT_ENDDOCPOST 使用されていません。
DOCUMENTEVENT_ENDDOCPREまたはDOCUMENTEVENT_ENDDOC 使用されていません。
DOCUMENTEVENT_ENDPAGE 使用されていません。
DOCUMENTEVENT_ESCAPE pvIn は、DOCEVENT_ESCAPE構造体を指します。
DOCUMENTEVENT_QUERYFILTER DOCUMENTEVENT_CREATEDCPREの場合と同じです。
DOCUMENTEVENT_RESETDCPOST pvIn には、この関数の以前の呼び出しで pvOut パラメーターで指定された DEVMODEW 構造体へのポインターのアドレスが含まれています。この関数は、iEsc パラメーターが DOCUMENTEVENT_RESETDCPRE に設定されています。
DOCUMENTEVENT_RESETDCPRE pvIn には、ResetDC 関数の呼び出し元によって提供される DEVMODEW 構造体へのポインターのアドレスが含まれています。
DOCUMENTEVENT_STARTDOCPOST pvIn はStartDoc 関数によって返される印刷ジョブ識別子を指定する LONG を指します。
DOCUMENTEVENT_STARTDOCPREまたはDOCUMENTEVENT_STARTDOC pvIn には、StartDoc 関数の呼び出し元によって提供される DOCINFO 構造体へのポインターのアドレスが含まれています。
DOCUMENTEVENT_STARTPAGE 使用されていません。

cbOut

iEsc がDOCUMENTEVENT_ESCAPE

ExtEscape 関数の cbOutput パラメーターとして使用される関数提供の値。

iEsc がDOCUMENTEVENT_QUERYFILTER

pvOut による へのバッファー ポインターの呼び出し元から指定されたサイズ (バイト単位)。

その他すべての iEsc 値

使用されていません。

[out] pvOut

出力バッファーへの関数提供ポインター。その使用は、 次のように iEsc に指定された値に依存します。

iEsc 定数 pvOut コンテンツ
DOCUMENTEVENT_CREATEDCPRE ドライバーが提供する DEVMODEW 構造体へのポインター。この構造体は、 CreateDC 呼び出し元によって提供されるのではなく、GDI によって使用されます。 ( NULL の場合、GDI は呼び出し元から提供された構造体を使用します)。
DOCUMENTEVENT_ESCAPE ExtEscape 関数の lpszOutData パラメーターとして使用されるバッファー ポインター。
DOCUMENTEVENT_QUERYFILTER DOCEVENT_FILTER構造体を含むバッファーへの呼 出し元から提供されたポインター。
DOCUMENTEVENT_RESETDCPRE ドライバーが提供する DEVMODEW 構造体へのポインター。 これは、ResetDC 関数の呼び出し元によって提供されるのではなく GDI によって使用されます。 ( NULL の場合、GDI は呼び出し元から提供された構造体を使用します)。
その他のすべての iEsc 使用されていません。

戻り値

関数の戻り値は、 iEsc に指定されたエスケープに依存します。 一部のエスケープ コードでは、戻り値は使用されません (2 番目の値の一覧を参照してください)。 関数が戻り値を提供する場合は、次のいずれかである必要があります。

リターン コード 説明
DOCUMENTEVENT_FAILURE ドライバーは 、iEsc によって識別されるエスケープ コードをサポートしていますが、エラーが発生しました。
DOCUMENTEVENT_SUCCESS ドライバーは、 iEsc によって識別されるエスケープ コードを正常に処理しました。
DOCUMENTEVENT_UNSUPPORTED ドライバーは、 iEsc によって識別されるエスケープ コードをサポートしていません。

注釈

プリンター インターフェイス DLL は、必要に応じて、ドキュメントのレンダリングに関連付けられた GDI 呼び出しの前処理または後処理を実行する DrvDocumentEvent 関数を提供できます。 DrvDocumentEvent 関数の呼び出しは、アプリケーションが GDI クライアントを呼び出すときに、ユーザー モードの GDI クライアントから行われます。

DOCUMENTEVENT_QUERYFILTERの iEsc 値の場合、スプーラーは、ドライバーがDOCEVENT_FILTER構造体の特定のメンバーを変更したかどうかに応じて、 DrvDocumentEvent によって返される DOCUMENTEVENT_SUCCESS 値を 2 つの方法で解釈できます。 ( pvOut パラメーターは、この構造体を指します)。スプーラーは、この型の構造体にメモリを割り当てると、この構造体の 2 つのメンバー cElementsReturnedcElementsNeeded を既知の値に初期化します。 DrvDocumentEvent が返された後、スプーラーはこれらのメンバーの値が変更されたかどうかを判断し、その情報を使用して DrvDocumentEvent の戻り値を解釈します。 この状況を次の表にまとめます。

戻り値 cElementsReturned、cElementsNeeded の状態 意味
DOCUMENTEVENT_SUCCESS ドライバーは、どちらのメンバーにも変更を加えなくなりました。 スプーラーは、この戻り値をDOCUMENTEVENT_UNSUPPORTEDと等価と解釈します。 スプーラーはドライバーからイベント フィルターを取得できないため、すべてのイベントに対して DrvDocumentEvent を呼び出しても保持されます。
DOCUMENTEVENT_SUCCESS ドライバーは、一方または両方のメンバーに書き込んだ。 スプーラーは、解釈なしでこの戻り値を受け入れます。 ドライバーが cElementsNeeded と cElementsReturned の 1 つだけに書き込 んだ場合、スプーラーは変更されていないメンバーの値が 0 であると見なします。 スプーラーは、DOCEVENT_FILTERaDocEventCall メンバーにリストされているすべてのイベントを除外します。
DOCUMENTEVENT_UNSUPPORTED 適用なし ドライバーはDOCUMENTEVENT_QUERYFILTERをサポートしていません。 スプーラーはドライバーからイベント フィルターを取得できないため、すべてのイベントに対して DrvDocumentEvent を呼び出しても保持されます。
DOCUMENTEVENT_FAILURE 適用なし ドライバーはDOCUMENTEVENT_QUERYFILTERをサポートしていますが、内部エラーが発生しました。 スプーラーはドライバーからイベント フィルターを取得できないため、すべてのイベントに対して DrvDocumentEvent を呼び出しても保持されます。

エスケープ コード名にサフィックスがない場合、または PRE にサフィックスが付いている場合、GDI クライアントはカーネル モード GDI レンダリング エンジンを呼び出す直前に DrvDocumentEvent を呼び出します。 エスケープ コード名のサフィックスに POST が付いている場合、GDI クライアントは、カーネル モードの GDI レンダリング エンジンから戻った直後に DrvDocumentEvent を呼び出します。

iEsc パラメーターで指定されたエスケープ コードがDOCUMENTEVENT_CREATEDCPRE場合は、次の規則が適用されます。

  • ジョブがスプールなしでプリンターに直接送信される場合、 pvIn --> pszDevice はプリンター名を指します。 (詳細については、 DOCEVENT_CREATEDCPRE 構造体を参照してください)。

  • ジョブがスプールされている場合、 pvIn --> pszDevice はプリンター・ポート名を指します。

DrvDocumentEvent 関数は、GDI クライアント関数のユーザー モード呼び出し元のコンテキストで実行されます。 EMF スプールが使用不可の場合、この関数はユーザー・インターフェースを表示できます。 たとえば、FAX ドライバーの DrvDocumentEvent 関数は、GDI の StartDoc 関数が処理される前に、ユーザーにダイアログ ボックスを表示する場合があります。

64 ビット バージョンの Windows で 32 ビット アプリケーションを実行する場合は、次の制限が適用されます。

  • DrvDocumentEvent が呼び出す必要がある GDI 関数は ExtEscape のみで、プライベート エスケープのみを使用する必要があります。

  • 他の GDI 関数に対する DrvDocumentEvent 呼び出しでは、未定義の動作が発生する可能性があります。

要件

要件
対象プラットフォーム デスクトップ
Header winddiui.h (Winddiui.h を含む)

こちらもご覧ください

DOCEVENT_CREATEDCPRE

DOCEVENT_ESCAPE

DOCEVENT_FILTER