デバイス管理サーフェスを処理する

Unidrv は、印刷ページ イメージをレンダリングするときに、GDI で管理された描画サーフェスを使用します。 すべてのイメージがビットマップとしてレンダリングされます。 ベクターを描画する機能など、このシナリオでは利用できない機能を備えたデバイスの場合は、デバイスで管理された描画サーフェスに対してカスタマイズされたドライバー サポートを提供できます。 デバイスで管理されるサーフェスをサポートするには、次を実装するレンダリング プラグインを提供する必要があります。

  • Unidrv でサポートされているグラフィックス DDI 描画関数のフック関数のセット。 次の関数をフックする必要があります: DrvAlphaBlendDrvBitBltDrvCopyBitsDrvDitherColorDrvFillPathDrvGradientFillDrvLineToDrvPlgBltBltDrvRealizeBrushDrvStretchBltDrvBltDrvStrokeAndFillPathDrvTextOutDrvTransparentBlt

  • IPrintUni::EnableDriver メソッド。このメソッドは、グラフィックス DDI フック関数へのポインターを Unidrv に提供するために使用されます。

  • IPrintUni::D riverDMS メソッド。デバイス管理サーフェスを使用する必要があるという通知を Unidrv に通知し、定義されたフック関数のどちらをサーフェスに使用するのか指定します。

フック関数は、デバイスで管理されたサーフェスに描画するときに、GDI の Eng プレフィックス付きサポート サービスに呼び戻しを行う必要があります。 ただし、一時的なビットマップ サーフェスを作成し、そのサーフェスのハンドルを Eng プレフィックス付き描画関数に渡す場合があります (「印刷ジョブのレンダリング」を参照)。

印刷ジョブがレンダリングされそうになるたび 、IPrintUni::D riverDMS メソッドが呼び出されます。そのため、レンダリング プラグインでは、各ジョブに対してレンダリング サーフェスの種類 (GDI で管理またはデバイス管理) を指定できます。 ユーザー インターフェイスの選択可能なオプションを基に、ユーザー インターフェイス プラグインも提供 する必要があります

サーフェス上のテキストDevice-Managedする

レンダリング プラグインは、Unidrv の DrvTextOut 関数 (他のすべてのグラフィックス DDI 描画関数と共に) をフックする必要があります。 デバイスで管理されるサーフェスのテキストを作成するには、次の 4 つの関数間の対話が必要です。

デバイスで管理された画面にテキストを表示する手順は次のとおりです。

  1. GDI は Unidrv の DrvTextOut 関数を呼び出 します。

  2. Unidrv は、レンダリング プラグインの DrvTextOut フック関数を 呼び出します。

  3. フック関数は、テキストのブラシ、回転、クリップ領域を指定するコマンドをデバイスに送信します。

  4. フック関数は、Unidrv の IPrintDriverUni::D rvUniTextOut メソッドを呼び出します。このメソッドは、ダウンロードしたフォントを使用してテキストを出力します。 このメソッドは、グリフベースのクリッピングも処理します。

  5. IPrintDriverUni::D rvUniTextOut でダウンロード可能なフォントを使用できない場合 (フォントが使用できないか、回転している場合)、レンダリング プラグインの IPrintUni::TextOutAsBitmap メソッドが呼び出され、テキストがビットマップとして描画されます。

  6. IPrintDriverUni::D rvUniTextOut が返された後、DrvTextOut フック関数は、ベクター コマンド (サポートされている場合) を使用して、DrvTextOut 関数の prclExtra パラメーターで指定された四角形に基づいて下線と取り消し線を描画する必要があります。