DOCEVENT_FILTER構造体 (winddiui.h)
DOCEVENT_FILTER構造体には、プリンター ドライバーが応答するドキュメント イベントの一覧が含まれています。 ドキュメント イベントの完全な一覧については、「 DrvDocumentEvent 」を参照してください。
構文
typedef struct _DOCEVENT_FILTER {
UINT cbSize;
UINT cElementsAllocated;
UINT cElementsNeeded;
UINT cElementsReturned;
DWORD aDocEventCall[ANYSIZE_ARRAY];
} DOCEVENT_FILTER, *PDOCEVENT_FILTER;
メンバー
cbSize
この構造体のスプーラー提供のサイズ (バイト単位)。 スプーラーは、このメンバーを sizeof(DOCEVENT_FILTER) に初期化します。
cElementsAllocated
aDocEventCall 配列メンバー内のスプーラー指定の要素数。 スプーラーは、このメンバーを DOCUMENTEVENT_LAST - 1 に初期化します。 (DOCUMENTEVENT_LAST定数は、ヘッダー ファイル Winddiui.h で定義されています。
cElementsNeeded
aDocEventCall 配列メンバーに必要なドライバー指定の要素の合計数。 スプーラーは、このメンバーを初期化して0XFFFFFFFFします。 詳細については、「解説」を参照してください。
cElementsReturned
aDocEventCall 配列メンバーに配置されたドライバー指定のDOCUMENTEVENT_**XXX **イベントの数。 スプーラーは、このメンバーを初期化して0XFFFFFFFFします。 詳細については、「解説」を参照してください。
aDocEventCall[ANYSIZE_ARRAY]
プリンター ドライバーが応答するすべての DOCUMENTEVENT_XXX イベントを一覧表示する DWORD のドライバーでいっぱいの配列。 スプーラーは、このメンバーを 0 に初期化します。
注釈
プリンター ドライバーは、DOCEVENT_FILTER構造体で応答するイベントを一覧表示します。 これにより、スプーラーが行う必要があるドライバーへの呼び出しの数が制限されるため、プリンターのパフォーマンスが向上します。 スプーラーが iEsc パラメーターを DOCUMENTEVENT_QUERYFILTER に設定して DrvDocumentEvent DDI を呼び出すと、スプーラーは、その aDocEventCall 配列を含むDOCEVENT_FILTER構造体を含むバッファーを割り当てます。 バッファーに割り当てられるメモリの量は次のとおりです。
sizeof(DOCEVENT_FILTER) + sizeof(DWORD) * (DOCUMENTEVENT_LAST - 2)
DOCEVENT_FILTER構造体を含むバッファーを割り当てた後、スプーラーは構造体メンバーを次の値に初期化します。
メンバー | に初期化 |
---|---|
cbSize | 0 |
cElementsAllocated | DOCUMENTEVENT_LAST - 1 DOCUMENTEVENT_LAST定数は winddiui.h で定義されます。 |
cElementsNeeded | 0XFFFFFFFF |
cElementsReturned | 0XFFFFFFFF |
aDocEventCall | 0 |
スプーラーは、前の表に示した値に構造体メンバーを初期化した後、 DrvDocumentEvent を呼び出します。 この関数が戻ると、スプーラーは cElementsNeeded メンバーと cElementsReturned メンバーを調べて、どちらかが変更されているかどうかを確認します。 ドライバーがこれらのメンバーの 1 つに書き込まれたが、もう一方には書き込まれていない場合、スプーラーは、値 0 を持つとして、書き込まれていないメンバーを解釈します。
ドライバーがDOCUMENTEVENT_QUERYFILTERをサポートしている場合:
aDocEventCall 配列が、プリンター ドライバーが配置しようとしているすべてのDOCUMENTEVENT_XXX イベントを格納するのに十分な大きさの場合、プリンター ドライバーは次のようになります。
配列にこれらのイベントを入力します
cElementsReturned メンバーをその数のイベントに設定します (cElementsAllocated 以下にする必要があります)
cElementsNeed を変更せずに残します
DOCUMENTEVENT_SUCCESSを返します
この場合、スプーラーは aDocEventCall 配列の最初の cElementsReturned 値を使用します。
DOCUMENTEVENT_CREATEDCPRE イベントは特別な方法で処理されます。 スプーラーが iEsc パラメーターを DOCUMENTEVENT_CREATEDCPRE に設定して DrvDocumentEvent を呼び出すと、スプーラーは戻り値を使用して、この関数の今後の呼び出しが必要かどうかを判断します。 他のDOCUMENTEVENT_XXX イベントとは異なり、プリンター ドライバーは常に、このイベントがフィルター処理されているかどうかに関係なく、DOCUMENTEVENT_CREATEDCPREを使用して DrvDocumentEvent への呼び出しを受け取ります。
aDocEventCall 配列が、プリンター ドライバーが配置しようとしているすべてのDOCUMENTEVENT_XXX イベントを格納するのに十分な大きさでない場合、プリンター ドライバーは次のようにする必要があります。
cElementsNeeded を、応答する予定のイベントの数に設定します (cElementsAllocated より大きくする必要があります)
cElementsReturned を変更しない
戻り値DOCUMENTEVENT_SUCCESS
この場合、スプーラーは十分な大きさの新しいバッファーを割り当て、DOCUMENTEVENT_QUERYFILTERを使用して DrvDocumentEvent を別の呼び出しを行います。
ドライバーがDOCUMENTEVENT_QUERYFILTER イベントをサポートしていない場合は、DOCUMENTEVENT_UNSUPPORTEDを返す必要があります。 ドライバーがDOCUMENTEVENT_QUERYFILTERをサポートしていても、このイベントを処理するときに内部エラーが発生した場合は、DOCUMENTEVENT_FAILUREを返す必要があります。 どちらの場合も、スプーラーはドライバーからイベント フィルターを取得できないため、すべてのイベントに対して DrvDocumentEvent を呼び出す動作が続行されます。
要件
要件 | 値 |
---|---|
Header | winddiui.h (Winddiui.h を含む) |