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 メンバーを して、いずれかが変更されているかどうかを確認します。 ドライバーがこれらのメンバーのいずれかに書き込まれたが、もう一方には書き込まれていない場合、スプーラーは、書き込まれていないメンバーを値 0 と解釈します。
ドライバーがDOCUMENTEVENT_QUERYFILTERをサポートしている場合:
aDocEventCall 配列に、プリンター ドライバーが配置しようとしているすべてのDOCUMENTEVENT_XXX イベントを格納するのに十分な大きさの場合、プリンター ドライバーは次のようになります。
配列にこれらのイベントを入力します。
cElementsReturned メンバーをその数のイベントに設定します (cElementsAllocated 以下にする必要があります)。
cElementsNeeded を変更せずに残します
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 を呼び出す動作が続行されます。
必要条件
要件 | 価値 |
---|---|
ヘッダー | winddiui.h (Winddiui.h を含む) |