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

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

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

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

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

print dialog box

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

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

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

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

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

[ ファイルへ印刷 ] チェック ボックスは、ユーザーがプリンターではなくファイルに出力を送信するかどうかを示します。 チェック ボックスが最初に選択されるように 、PD_PRINTTOFILE フラグを設定できます。 チェック ボックスを非表示にするには、 PD_HIDEPRINTTOFILE フラグを設定します。 無効にするには、 PD_DISABLEPRINTTOFILE フラグを設定します。 ユーザーが [ファイルに印刷] オプションを選択した場合、PrintDlgは PD_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 フラグを設定します。 この場合、PrintDlghDevMode メンバーと 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