次の方法で共有


[ページ設定] ダイアログ ボックス

ユーザーが印刷ページの次の属性を設定できるようにするモーダル ダイアログ ボックスを表示します。

  • 用紙の種類 (封筒、法律、手紙など)
  • 紙源(手動給紙、トラクターフィード、シートフィーダなど)
  • ページの向き (縦または横)
  • ページ余白の幅

PAGESETUPDLG 構造体を初期化し、その構造を PageSetupDlg 関数に渡すことで、[ページ設定] ダイアログ ボックスを作成して表示します。 ただし、ダイアログ ボックスに表示される属性は、プリンターの機能によって異なります。 次の図は、一般的な [ページ設定] ダイアログ ボックスを示しています。

[ページ設定] ダイアログ ボックス

ユーザーが [OK] ボタンをクリックすると、PAGESETUPDLG 構造体のさまざまなメンバーを設定してユーザーの選択内容を指定した後、PageSetupDlgTRUE を返します。 ptPaperSize メンバーと rtMargin メンバーには、ユーザーによって指定された値が含まれています。 hDevMode メンバーと hDevNames メンバーには、DEVMODE 構造体と DEVNAMES 構造体のグローバル メモリ ハンドルが含まれています。 これらの構造体には、追加のページ情報とプリンターに関する情報が含まれています。 この情報を使用して、選択したプリンターに送信する出力を準備できます。

ユーザーが [ ページ設定 ] ダイアログ ボックスをキャンセルするか、エラーが発生した場合、 PageSetupDlgFALSE を返します。 エラーの原因を特定するには、 CommDlgExtendedError 関数を呼び出して、拡張エラー値を取得します。

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

[ページ設定] ダイアログ ボックスの初期化

既定では、[ ページ設定] ダイアログ ボックスには、現在の既定のプリンターに関する情報が表示されます。 ダイアログ ボックスに特定のプリンターに関する情報を表示するように指示するには、 DEVMODE 構造体または DEVNAMES 構造体のメンバーを設定し、これらの構造体のグローバル メモリ ハンドルを PAGESETUPDLG の対応するメンバーに割り当てます。 現在インストールされていないプリンターの名前を指定すると、ダイアログ ボックスにエラー メッセージが表示されます。 ダイアログ ボックスにエラー メッセージが表示されないようにするには、 PSD_NOWARNING 値を使用します。 [ ページ設定] ダイアログ ボックスを表示せずに既定のプリンターに関する情報を取得するには、 PSD_RETURNDEFAULT 値を使用します。

既定の測定システムがインチの場合、ダイアログ ボックスでは既定の単位として 1000 分の 1 インチが使用されます。 既定の測定システムがメトリックの場合、ダイアログ ボックスでは既定の測定単位として 100 分の 1 のミリメートルが使用されます。 既定の測定単位をオーバーライドするには、PAGESETUPDLG 構造体の Flags メンバーにPSD_INHUNDREDTHSOFMILLIMETERSフラグまたはPSD_INTHOUSANDTHSOFINCHES フラグを設定します。

既定では、余白の初期値は 1 インチです。 PSD_MARGINS フラグを設定すると、ダイアログ ボックスに rtMargin メンバーで指定された初期余白の値が表示されます。 ユーザーが余白に指定できる既定の最小値は、プリンターで許可される最小余白です。 PSD_MINMARGINS フラグを設定すると、ダイアログ ボックスで rtMinMargin メンバーで指定された最小余白が適用されます。

ユーザーが特定のオプションを選択できないようにするには、次のフラグの任意の組み合わせを設定して、対応するコントロールを無効にします。

フラグ 説明
PSD_DISABLEMARGINS ユーザーが余白の設定を入力する編集コントロールを無効にします。
PSD_DISABLEORIENTATION [縦] および [横] ラジオ ボタンを無効にします。
PSD_DISABLEPAPER 用紙サイズと用紙ソースを選択するためのコントロールを無効にします。
PSD_DISABLEPRINTER [ プリンター ] ボタンを無効にします。

 

[ページ設定] ダイアログ ボックスのカスタマイズ

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

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

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

        または

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

ダイアログ ボックス プロシージャに送信されたメッセージをフィルター処理するには、 PageSetupHook フック プロシージャを指定します。 カスタム テンプレートを使用して追加のコントロールを定義する場合は、コントロールの入力を処理するための PageSetupHook フック プロシージャを指定する必要があります。 さらに、 PagePaintHook フック プロシージャを指定して、[ページ 設定 ] ダイアログ ボックスに表示されるサンプル ページの内容をカスタマイズすることもできます。 PagePaintHook フック プロシージャの詳細については、「サンプル ページのカスタマイズ」を参照してください。

PageSetupHook フック プロシージャを有効にするには

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

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

サンプル ページのカスタマイズ

[ ページ設定] ダイアログ ボックスには、ユーザーの選択が印刷された出力の外観にどのように影響するかを示すサンプル ページの画像が含まれています。 画像は、選択した用紙または封筒の種類を表す四角形で構成され、現在の余白を表す点線の四角形と、印刷されたページでのテキストの外観を示す部分 (ギリシャ語のテキスト) 文字で構成されます。

PageSetupDlg 関数を呼び出すときに、PagePaintHook フック プロシージャを指定して、サンプル ページの外観をカスタマイズできます。

PagePaintHook フック プロシージャを有効にするには

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

ダイアログ ボックスでサンプル ページの内容が描画されようとするたびに、フック プロシージャは、表示されている順序で次のメッセージを受け取ります。

メッセージ 意味
WM_PSD_PAGESETUPDLG このダイアログ ボックスでは、サンプル ページを描画します。 フック プロシージャは、このメッセージを使用して、サンプル ページの内容を描画する準備を行うことができます。
WM_PSD_FULLPAGERECT このダイアログ ボックスでは、サンプル ページを描画します。 このメッセージは、サンプル ページの外接する四角形を指定します。
WM_PSD_MINMARGINRECT このダイアログ ボックスでは、サンプル ページを描画します。 このメッセージは、余白の四角形を指定します。
WM_PSD_MARGINRECT ダイアログ ボックスは、余白の四角形を描画します。
WM_PSD_GREEKTEXTRECT ダイアログ ボックスは、余白の四角形内にギリシャ語のテキストを描画します。
WM_PSD_ENVSTAMPRECT このダイアログ ボックスは、封筒のサンプル ページの封筒スタンプの四角形に描画されようとしています。 このメッセージは封筒に対してのみ送信されます。
WM_PSD_YAFULLPAGERECT このダイアログ ボックスでは、封筒のサンプル ページの戻り値のアドレス部分が描画されます。 このメッセージは、封筒やその他の用紙サイズに対して送信されます。

 

フック プロシージャが描画シーケンスの最初の 3 つのメッセージ (WM_PSD_PAGESETUPDLGWM_PSD_FULLPAGERECT、またはWM_PSD_MINMARGINRECT) に対して TRUE を返す場合、ダイアログ ボックスはそれ以上メッセージを送信せず、次回システムがサンプル ページを再描画する必要があるまでサンプル ページに描画しません。 フック プロシージャが 3 つのメッセージすべてに 対して FALSE を 返す場合、ダイアログ ボックスは図面シーケンスの残りのメッセージを送信します。

フック プロシージャが描画シーケンス内の残りのメッセージに対して TRUE を 返す場合、ダイアログ ボックスはサンプル ページの対応する部分を描画しません。 フック プロシージャがこれらのメッセージに対して FALSE を 返す場合、ダイアログ ボックスはサンプル ページのその部分を描画します。

ダイアログ ボックスでサンプル ページの内容が描画されないようにするには、 PSD_DISABLEPAGEPAINTING フラグを設定します。 このフラグは、すべてのWM_PSD_* メッセージを受信し、サンプル ページの内容を描画できる PagePaintHook フック プロシージャには影響しません。