プロパティ シートの印刷

Print プロパティ シートは、ユーザーが特定の印刷ジョブのプロパティを指定できるようにする標準のユーザー インターフェイスです。 プロパティ シートは、プリンターまたはアプリケーションによって異なるプロパティ ページのセットで構成されます。 標準の Windows プロパティ ページのサブセットには、一部のプリンターでドライバー固有のプロパティ ページが追加される場合があり、一部のアプリケーションではアプリケーション固有のプロパティ ページが追加される場合があります。

Print プロパティ シートを作成して表示するには、PRINTDLGEX 構造体を初期化し、その構造体を PrintDlgEx 関数に渡します。

次の図は、一般的な Print プロパティ シートを示しています。

printer プロパティ シート

PRINTDLGEX 構造体のほとんどのメンバーは、PRINTDLG 構造体のメンバーと同じです。 共通構造メンバーを使用してダイアログ ボックス コントロールを操作する方法については、「 印刷ダイアログ ボックス」を参照してください。 このトピックの残りの部分では、[ 印刷 ] ダイアログ ボックスとは異なる [ 印刷 ] プロパティ シートの機能について説明します。

[全般] ページの下部にカスタム ダイアログ ボックス テンプレートを指定し、[全般] ページの後に追加のプロパティ ページを指定することで、Print プロパティ シートをカスタマイズできます。 詳細については、「 印刷プロパティ シートのカスタマイズ」を参照してください。

プロパティ シートが表示されている間、 PrintDlgEx 関数から通知とメッセージを受信するコールバック オブジェクトを実装できます。 カスタム テンプレートまたは追加のページを提供するアプリケーションでは、コールバック オブジェクトを使用してプロパティ シートと通信します。 詳細については、「 Print プロパティ シートの Callback オブジェクト」を参照してください。

Print プロパティ シートでは、印刷する複数の連続しないページ範囲を指定できます。 PRINTDLGEX 構造体の lpPageRanges メンバーは、各構造体がページ範囲を指定する PRINTPAGERANGE 構造体の配列を指定します。

Print プロパティ シートには、ラジオ ボタンの [ページ範囲] グループの一部として [現在のページ] ラジオ ボタンが表示されます。 [現在のページ] ラジオ ボタンを制御するには、PRINTDLGEX 構造体の Flags メンバーのPD_CURRENTPAGEフラグとPD_NOCURRENTPAGE フラグを使用します。

このセクションでは、次のトピックについて説明します。

印刷プロパティ シートのカスタマイズ

Print プロパティ シートは、次の方法でカスタマイズできます。

  • [ 全般] ページの下部にカスタム テンプレートを指定します。 これにより、アプリケーションに固有の追加のコントロールを含めることができます。 PrintDlgEx 関数は、既定のテンプレートの代わりにカスタム テンプレートを使用します。
  • [ 全般] ページの後に追加のプロパティ ページを指定します。
  • コールバック オブジェクトを指定します。 詳細については、「 Print プロパティ シートの Callback オブジェクト」を参照してください。

[全般] ページの上部を変更することはできません。 プリンター ドライバーによって提供されるプロパティ ページを変更することはできません。

[全般] ページのカスタム テンプレートを指定するには:

  1. Prnsetup.dlg ファイルで指定された PRINTDLGEXORD テンプレートを変更して、[ 全般] ページの下部にカスタム テンプレートを作成します。 通常、カスタム テンプレートは既定のテンプレートと同じサイズにする必要があります。 ただし、 PD_USELARGETEMPLATE フラグを指定して大きな [全般 ] ページを作成する場合は、カスタム テンプレートを拡大できます。 既定の [印刷 ] ダイアログ テンプレートで使用されるコントロール識別子は、Dlgs.h ファイルで定義されています。

  2. PRINTDLGEX 構造体を使用して、次のようにテンプレートを有効にします。

    • カスタム テンプレートがアプリケーションまたはダイナミック リンク ライブラリのリソースである場合は、Flags メンバーでPD_ENABLEPRINTTEMPLATE フラグを設定します。 構造体の hInstance メンバーと lpPrintTemplateName メンバーを使用して、モジュールとリソース名を識別します。

      または

    • カスタム テンプレートが既にメモリ内にある場合は、 PD_ENABLEPRINTTEMPLATEHANDLE フラグを設定します。 テンプレートを含むメモリ オブジェクトを識別するには、 hInstance メンバーを使用します。

  3. カスタム テンプレートを使用して追加のコントロールを定義する場合は、コントロールの入力を処理するコールバック オブジェクトを指定する必要があります。 コールバック オブジェクトは、カスタム ダイアログ ボックスに送信されたメッセージを受信する IPrintDialogCallback::HandleMessage メソッドを実装します。

追加のプロパティ ページを提供するには

  1. 関数を使用して、追加のページを作成します。

  2. PRINTDLGEX 構造体の lphPropertyPages メンバーを使用して、追加ページへのハンドルの配列を指定します。

    各ページの作成時に指定されたダイアログ ボックス プロシージャは、ページに送信されるメッセージを処理します。

  3. インターフェイスを実装するコールバック オブジェクトを指定することもできます。 PrintDlgEx 関数は、このインターフェイスを使用して、IPrintDialogServices インターフェイスへのポインターをアプリケーションに渡します。 追加のプロパティ ページのダイアログ ボックス プロシージャでは、このインターフェイスを使用して、現在選択されているプリンターに関する情報を取得できます。

Print プロパティ シートの Callback オブジェクト

Print プロパティ シートを表示するアプリケーションは、コールバック オブジェクトを実装して、プロパティ シートの表示中に PrintDlgEx 関数から通知とメッセージを受信できます。 コールバック オブジェクトを指定するには、PRINTDLGEX 構造体の lpCallback メンバー内の オブジェクトへのポインターを指定します。

コールバック オブジェクトは 、IPrintDialogCallback インターフェイスを実装する必要があります。 PrintDlgEx 関数は、次の状況で IPrintDialogCallback メソッドを呼び出します。

  • ダイアログ ボックスが初期化されたとき
  • ユーザーが、プロパティ シートに表示されるインストール済みプリンターの一覧から別のプリンターを選択した場合
  • プロパティ シートの [全般 ] ページの下部にある子ダイアログ ボックスのメッセージを受信する場合

コールバック オブジェクトは 、IObjectWithSite インターフェイスも実装する必要があります。 PrintDlgEx 関数は、 メソッドを呼び出して、IPrintDialogServices インターフェイスへのポインターをアプリケーションに渡します。 IPrintDialogCallback メソッドは、IPrintDialogServices インターフェイスを使用して、現在選択されているプリンターに関する情報を取得できます。 IPrintDialogServices インターフェイスは、Print プロパティ シートの [全般] ページに従う追加のページを作成するアプリケーションにも役立ちます。 追加ページのダイアログ ボックス プロシージャでは 、IPrintDialogServices メソッドを 呼び出すことができます。