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

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

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

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

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

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

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

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

[ 印刷 ] ダイアログボックスには、ユーザーがすべてのページ、ページの範囲、または選択したテキストのみを印刷するかどうかを示す、 印刷範囲 のラジオボタンのグループが含まれています。 PrintDlgを呼び出す前に、いずれかの pd _ allpagespd _ SELECTION、または pd _ pagenums フラグを設定して、最初に選択されたボタンを示すことができます。 PrintDlgTRUE を返す場合、関数は、ユーザーの選択内容を示すために、これらのフラグのいずれかを設定します。 PD _ pagenums が設定されている場合、 PRINTDLG構造体の nfrompage メンバーと nToPage メンバーには、ユーザーが指定した開始ページと終了ページが含まれます。 [ ページ ] オプションボタンと、それに 関連付けれているコントロールを編集する には、 PD _ nopagenums フラグを設定します。 選択 オプションボタンを無効にするには、 PD _ noselection フラグを設定します。

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

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

[ ファイルに 出力する] チェックボックスは、ユーザーがプリンターではなくファイルに出力を送信するかどうかを示します。 このチェックボックスが最初に選択されるように、 PD _ PRINTTOFILE フラグを設定できます。 チェックボックスを非表示にするには、 PD _ HIDEPRINTTOFILE フラグを設定します。 無効にするには、 PD _ DISABLEPRINTTOFILE フラグを設定します。 ユーザーが [ Print To File ] オプションを選択すると、 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 ファイルで指定されている既定のテンプレートを変更して、カスタムテンプレートを作成します。 既定の 印刷 ダイアログテンプレートで使用されるコントロール識別子は、dlgs .h ファイルで定義されています。
  2. PRINTDLG構造体を使用して、次のようにテンプレートを有効にします。
    • カスタムテンプレートがアプリケーションまたはダイナミックリンクライブラリ内のリソースである場合は、フラグ メンバーで 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