[印刷] ダイアログ ボックス

[ 印刷 ] ダイアログ ボックスを使用すると、ユーザーは特定の印刷ジョブのオプションを選択できます。 たとえば、ユーザーは、使用するプリンター、印刷するページの範囲、およびコピー数を指定できます。

PrintDlgEx 関数を使用すると、[印刷] ダイアログ ボックスのようなコントロールを含む [全般] ページがある Print プロパティ シートを表示できます。 プロパティ シートには、[ 全般] ページの後に、アプリケーション固有およびドライバー固有の追加のプロパティ ページを含めることもできます。

PRINTDLG構造体を初期化し、その構造体を PrintDlg 関数に渡すことで、[印刷] ダイアログ ボックスを作成して表示します。

次の図は、一般的な [印刷 ] ダイアログ ボックスを示しています。

[印刷] ダイアログ ボックス

ユーザーが [OK] ボタンをクリックすると、 PrintDlgTRUE を 返し、 PRINTDLG 構造体を使用してユーザーの選択に関する情報を返します。 たとえば、 hDevMode メンバーと hDevNames メンバーは 、通常、および DEVNAMES 構造体のグローバル メモリ ハンドルを返します。 これらの構造体の情報を使用して、選択したプリンターのデバイス コンテキストまたは情報コンテキストを作成できます。

ユーザーが [ 印刷 ] ダイアログ ボックスをキャンセルするか、エラーが発生した場合、 PrintDlgFALSE を返しますCommDlgExtendedError 関数を使用して拡張エラー値を取得することで、エラーの原因を特定できます。

[ 印刷 ] ダイアログ ボックスには、ユーザーがすべてのページ、ページ範囲、または選択したテキストのみを印刷するかどうかを示すラジオ ボタンの [印刷 範囲] グループが含まれています。 PrintDlg を呼び出す前に、PD_ALLPAGESPD_SELECTION、またはPD_PAGENUMSのいずれかのフラグを設定して、最初に選択されたボタンを示すことができます。 PrintDlg がTRUE を返すと、関数は、ユーザーの選択を示すこれらのフラグのいずれかを設定します。 PD_PAGENUMSが設定されている場合、PRINTDLG 構造体の nFromPage および nToPage メンバーには、ユーザーが指定した開始ページと終了ページが含まれます。 [ページ] ラジオ ボタンとそれに関連付けられている [編集元] コントロールと [編集対象] コントロールを無効にするには、PD_NOPAGENUMS フラグを設定します。 [選択] ラジオ ボタンを無効にするには、PD_NOSELECTION フラグを設定します。

ダイアログ ボックスには、ユーザーが印刷する部数を入力できる編集コントロールが含まれています。 PRINTDLG 構造体の hDevMode メンバーが NULL 以外の場合、構造体の dmCopies メンバーは、この編集コントロールの初期値を指定します。 hDevModeNULL の場合、PRINTDLG 構造体の nCopies メンバーは初期値を指定します。 PrintDlg が返されると、nCopies は通常、ユーザーが指定したコピーの数を示します。 ただし、ダイアログ ボックスの作成時に PD_USEDEVMODECOPIESANDCOLLATE フラグを設定した場合、nCopies は戻り値として常に 1 に設定され、DEVMODEdmCopies メンバーは印刷するコピー数を示します。

[collate チェック] ボックスは、複数のコピーが印刷されている場合に、ユーザーがページを照合するかどうかを示します。 [collate チェック] ボックスが選択されている場合、PD_COLLATE フラグが設定されます。 アプリケーションで複数のコピーまたはシミュレートされた照合順序がサポートされていない場合は、PRINTDLG 構造体の Flags メンバーに PD_USEDEVMODECOPIESANDCOLLATE フラグを設定します。 これにより、プリンター ドライバーが複数のコピーと照合順序をサポートしていない限り、[Collate チェック] ボックスと [部数] 編集コントロールが無効になります。

[ファイルに印刷] チェック ボックスは、ユーザーがプリンターではなくファイルに出力を送信するかどうかを示します。 PD_PRINTTOFILE フラグを設定して、チェック ボックスが最初に選択されるようにすることができます。 チェック ボックスを非表示にするには、PD_HIDEPRINTTOFILE フラグを設定します。 無効にするには、 PD_DISABLEPRINTTOFILE フラグを設定します。 ユーザーが [ファイルに印刷] オプションを選択した場合、PrintDlgPD_PRINTTOFILE フラグを設定し、DEVNAMES 構造体の wOutputOffset メンバーによって示されるオフセットで "FILE:" を返します。 関数を呼び出して印刷操作を開始する場合は、構造体の lpszOutput メンバーにこの "FILE:" 文字列を指定します。 この文字列を指定すると、出力サブシステムは出力ファイルの名前をユーザーに照会します。

既定では、[ 印刷 ] ダイアログ ボックスには、現在の既定のプリンターに関する情報が最初に表示されます。 インストールされている別のプリンターの情報を表示するには、 と DEVNAMES 構造体を初期化し、グローバル メモリ ハンドルを 構造体に hDevMode および hDevNames メンバーに割り当てます。 DEVMODE 構造体の dmDeviceName メンバーおよび DEVNAMES 構造体の wDriverOffset メンバーで指定するデバイス名は、Win.ini ファイルの [デバイス] セクションにも表示されるプリンター デバイスを識別する必要があります。 デバイスが一覧にない場合、 PrintDlg はエラーを返します。

PRINTDLG 構造体の Flags メンバーでPD_RETURNDCまたはPD_RETURNIC フラグを設定することで、プリンターのデバイス コンテキストまたは情報コンテキストを作成するように PrintDlg に指示できます。 関数は、 hDC メンバー内のデバイス コンテキストまたは情報コンテキストへのハンドルを返します。 PD_RETURNDC フラグを使用する場合は、デバイス コンテキストを使用してプリンターの出力を生成できます。

[ 印刷 ] ダイアログ ボックスを表示せずに既定のプリンターに関する情報を取得するには、 PD_RETURNDEFAULT フラグを設定します。 この場合、 PrintDlg は、情報を含む構造体のハンドルに hDevMode メンバーと hDevNames メンバーを設定した直後に を返します。

既定では、エラーが発生すると 、PrintDlg にメッセージ ボックスが表示されます。 たとえば、プリンターがインストールされていない場合、この関数はエラー メッセージを表示します。 関数でこれらの警告メッセージが表示されないようにするには、 PD_NOWARNING フラグを設定します。

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

[印刷] ダイアログ ボックスのカスタマイズ

たとえば、アプリケーションに固有の追加のコントロールを含める場合は、[ 印刷 ] ダイアログ ボックスにカスタム テンプレートを指定できます。 PrintDlg 関数は、既定のテンプレートの代わりにカスタム テンプレートを使用します。

[印刷] ダイアログ ボックスのカスタム テンプレートを指定するには:

  1. Prnsetup.dlg ファイルで指定された既定のテンプレートを変更して、カスタム テンプレートを作成します。 既定の [印刷 ] ダイアログ テンプレートで使用されるコントロール識別子は、Dlgs.h ファイルで定義されます。
  2. PRINTDLG 構造体を使用して、次のようにテンプレートを有効にします。
    • カスタム テンプレートがアプリケーションまたはダイナミック リンク ライブラリのリソースである場合は、Flags メンバーで PD_ENABLEPRINTTEMPLATE フラグを設定します。 構造体の hInstance メンバーと lpPrintTemplateName メンバーを使用して、モジュールとリソース名を識別します。

      または

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

[印刷] ダイアログ ボックスには PrintHookProc フック プロシージャを指定できます。 フック プロシージャは、ダイアログ ボックスに送信されたメッセージを処理できます。 ダイアログ ボックスにメッセージを送信することもできます。 カスタム テンプレートを使用して追加のコントロールを定義する場合は、コントロールの入力を処理するためのフック プロシージャを指定する必要があります。

[印刷] ダイアログ ボックスのフック プロシージャを有効にするには:

  1. PRINTDLG 構造体の Flags メンバーにPD_ENABLEPRINTHOOK フラグを設定します。
  2. lpfnPrintHook メンバーにフック プロシージャのアドレスを指定します。

WM_INITDIALOG メッセージを処理した後、ダイアログ ボックス プロシージャはWM_INITDIALOGメッセージをフック プロシージャに送信します。 このメッセージの lParam パラメーターは、ダイアログ ボックスの初期化に使用される PRINTDLG 構造体へのポインターです。

PrintDlg 関数の呼び出しでPD_PRINTSETUP フラグを設定することで、[印刷設定] ダイアログ ボックスを作成して表示できます。 ただし、[ 印刷設定] ダイアログ ボックスは [ ページ設定 ] ダイアログ ボックスに置き換えられているので、新しいアプリケーションでは使用しないでください。

次のフラグは、[ 印刷設定 ] ダイアログ ボックスにのみ適用されます。

  • PD_ENABLESETUPHOOK
  • PD_ENABLESETUPTEMPLATE
  • PD_ENABLESETUPTEMPLATEHANDLE