PRINTDLGA 構造体 (commdlg.h)

PrintDlg 関数が [印刷] ダイアログ ボックスを初期化するために使用する情報を格納します。 ユーザーがダイアログ ボックスを閉じると、システムはこの構造を使用してユーザーの選択に関する情報を返します。

構文

typedef struct tagPDA {
  DWORD           lStructSize;
  HWND            hwndOwner;
  HGLOBAL         hDevMode;
  HGLOBAL         hDevNames;
  HDC             hDC;
  DWORD           Flags;
  WORD            nFromPage;
  WORD            nToPage;
  WORD            nMinPage;
  WORD            nMaxPage;
  WORD            nCopies;
  HINSTANCE       hInstance;
  LPARAM          lCustData;
  LPPRINTHOOKPROC lpfnPrintHook;
  LPSETUPHOOKPROC lpfnSetupHook;
  LPCSTR          lpPrintTemplateName;
  LPCSTR          lpSetupTemplateName;
  HGLOBAL         hPrintTemplate;
  HGLOBAL         hSetupTemplate;
} PRINTDLGA, *LPPRINTDLGA;

メンバー

lStructSize

型: DWORD

構造体のサイズ (バイト単位)。

hwndOwner

型: HWND

ダイアログ ボックスを所有するウィンドウへのハンドル。 このメンバーは、任意の有効なウィンドウ ハンドルにすることも、ダイアログ ボックスに所有者がない場合は NULL にすることもできます。

hDevMode

種類: HGLOBAL

DEVMODE 構造体を含む移動可能なグローバル メモリ オブジェクトへのハンドル。 入力時に hDevModeNULL でない場合は、DEVMODE 構造体に移動可能なメモリ ブロックを割り当て、そのメンバーを初期化する必要があります。 PrintDlg 関数は、入力データを使用してダイアログ ボックス内のコントロールを初期化します。 PrintDlg が返されると、DEVMODE メンバーはユーザーの入力を示します。

入力時に hDevModeNULL の場合、PrintDlgDEVMODE 構造体にメモリを割り当て、そのメンバーを初期化してユーザーの入力を示し、それを識別するハンドルを返します。

指定したプリンターのデバイス ドライバーが拡張デバイス モードをサポートしていない場合、PrintDlg が返されるときに hDevModeNULL になります

デバイス名 (DEVMODE 構造体の dmDeviceName メンバーで指定) が WIN.INI の [devices] セクションに表示されない場合、PrintDlg はエラーを返します。

hDevMode メンバーと hDevNames メンバーの詳細については、このトピックの最後にある「解説」セクションを参照してください。

hDevNames

種類: HGLOBAL

DEVNAMES 構造体を含む移動可能なグローバル メモリ オブジェクトへのハンドル。 入力時に hDevNamesNULL でない場合は、DEVNAMES 構造体に移動可能なメモリ ブロックを割り当て、そのメンバーを初期化する必要があります。 PrintDlg 関数は、入力データを使用してダイアログ ボックス内のコントロールを初期化します。 PrintDlg が返されると、DEVNAMES メンバーには、ユーザーが選択したプリンターの情報が含まれます。 この情報を使用して、デバイス コンテキストまたは情報コンテキストを作成できます。

hDevNames メンバーは NULL にすることができます。この場合、PrintDlgDEVNAMES 構造体にメモリを割り当て、そのメンバーを初期化してユーザーの入力を示し、それを識別するハンドルを返します。

hDevMode メンバーと hDevNames メンバーの詳細については、このトピックの最後にある「解説」セクションを参照してください。

hDC

種類: HDC

Flags メンバーがPD_RETURNDCまたはPC_RETURNICフラグを指定するかどうかに応じて、デバイス コンテキストまたは情報コンテキストへのハンドル。 どちらのフラグも指定しない場合、このメンバーの値は未定義です。 両方のフラグが指定されている場合、 PD_RETURNDC は優先度を持ちます。

Flags

型: DWORD

[ 印刷 ] ダイアログ ボックスを初期化します。 ダイアログ ボックスが返されると、ユーザーの入力を示すようにこれらのフラグが設定されます。 このメンバーには、次の値の 1 つ以上を指定できます。

意味
PD_ALLPAGES
0x00000000
[ すべて ] ラジオ ボタンが最初に選択されていることを示す既定のフラグ。 このフラグは、 PD_PAGENUMS フラグと PD_SELECTION フラグが指定されていないことを示すプレースホルダーとして使用されます。
PD_COLLATE
0x00000010
このフラグを設定すると、[Collate チェック] ボックスが選択されます。

PrintDlg 関数が戻るときにこのフラグが設定されている場合、アプリケーションは複数のコピーの照合順序をシミュレートする必要があります。 詳細については、 PD_USEDEVMODECOPIESANDCOLLATE フラグの説明を参照してください。

「PD_NOPAGENUMS」を参照してください。

PD_DISABLEPRINTTOFILE
0x00080000
[ファイルに印刷] チェック ボックスを無効にします。
PD_ENABLEPRINTHOOK
0x00001000
lpfnPrintHook メンバーで指定されたフック プロシージャを有効にします。 これにより、[ 印刷 ] ダイアログ ボックスのフック プロシージャが有効になります。
PD_ENABLEPRINTTEMPLATE
0x00004000
hInstance メンバーと lpPrintTemplateName メンバーが、既定の [印刷] ダイアログ ボックス テンプレートの置換を指定することを示します。
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
hPrintTemplate メンバーが、事前に読み込まれたダイアログ ボックス テンプレートを含むデータ ブロックを識別することを示します。 このテンプレートは、[ 印刷 ] ダイアログ ボックスの既定のテンプレートに置き換えられます。 このフラグが指定されている場合、システムは lpPrintTemplateName メンバーを無視します。
PD_ENABLESETUPHOOK
0x00002000
lpfnSetupHook メンバーで指定されたフック プロシージャを有効にします。 これにより、[ 印刷設定 ] ダイアログ ボックスのフック プロシージャが有効になります。
PD_ENABLESETUPTEMPLATE
0x00008000
hInstance メンバーと lpSetupTemplateName メンバーが、既定の [印刷設定] ダイアログ ボックス テンプレートの置換を指定することを示します。
PD_ENABLESETUPTEMPLATEHANDLE
0x00020000
hSetupTemplate メンバーが、事前に読み込まれたダイアログ ボックス テンプレートを含むデータ ブロックを識別することを示します。 このテンプレートは、[ 印刷設定 ] ダイアログ ボックスの既定のテンプレートに置き換えられます。 このフラグが指定されている場合、システムは lpSetupTemplateName メンバーを無視します。
PD_HIDEPRINTTOFILE
0x00100000
[ファイルに印刷] チェック ボックスを非表示にします。
PD_NONETWORKBUTTON
0x00200000
[ネットワーク] ボタンを非表示または無効にします。
PD_NOPAGENUMS
0x00000008
[ページ] ラジオ ボタンと関連する編集コントロールを無効にします。 また、[Collate チェック] ボックスがダイアログに表示されます。
PD_NOSELECTION
0x00000004
[選択] ラジオ ボタンを無効にします。
PD_NOWARNING
0x00000080
既定のプリンターがない場合に警告メッセージが表示されないようにします。
PD_PAGENUMS
0x00000002
このフラグを設定すると、[ ページ ] ラジオ ボタンが選択されます。 PrintDlg 関数が戻るときにこのフラグが設定されている場合、nFromPage メンバーと nToPage メンバーは、ユーザーが指定した開始ページと終了ページを示します。
PD_PRINTSETUP
0x00000040
[印刷] ダイアログ ボックスではなく、[印刷設定] ダイアログ ボックスが表示されます。
PD_PRINTTOFILE
0x00000020
このフラグを設定すると、[ファイルチェックに印刷] ボックスが選択されます。 PrintDlg 関数が戻るときにこのフラグが設定されている場合、DEVNAMES 構造体の wOutputOffset メンバーによって示されるオフセットには、文字列 "FILE:" が含まれます。 StartDoc 関数を呼び出して印刷操作を開始する場合は、DOCINFO 構造体の lpszOutput メンバーにこの "FILE:" 文字列を指定します。 この文字列を指定すると、出力サブシステムは出力ファイルの名前をユーザーに照会します。
PD_RETURNDC
0x00000100
PrintDlg は、ユーザーがダイアログ ボックスで行った選択に一致するデバイス コンテキストを返します。 デバイス コンテキストは hDC で返されます。
PD_RETURNDEFAULT
0x00000400
このフラグが設定されている場合、 PrintDlg 関数はダイアログ ボックスを表示しません。 代わりに、 hDevNames メンバーと hDevMode メンバーを、システムの既定のプリンター用に初期化された DEVMODE 構造体と DEVNAMES 構造体にハンドルするように設定します。 hDevNameshDevMode はどちらも NULL である必要があります。または、PrintDlg はエラーを返します。
PD_RETURNIC
0x00000200
PD_RETURNDC フラグと同様ですが、このフラグはデバイス コンテキストではなく情報コンテキストを返します。 PD_RETURNDCPD_RETURNICも指定されていない場合、hDC は出力時に未定義です。
PD_SELECTION
0x00000001
このフラグを設定すると、[ 選択] ラジオ ボタンが選択されます。 PD_PAGENUMSPD_SELECTIONも設定されていない場合は、[すべて] ラジオ ボタンが選択されます。
PD_SHOWHELP
0x00000800
ダイアログ ボックスに [ヘルプ ] ボタンが表示されます。 hwndOwner メンバーは、ユーザーが [ヘルプ] ボタンをクリックしたときにダイアログ ボックスが送信する HELPMSGSTRING 登録済みメッセージを受信するウィンドウを指定する必要があります。
PD_USEDEVMODECOPIES
0x00040000
PD_USEDEVMODECOPIESANDCOLLATEと同じです。
PD_USEDEVMODECOPIESANDCOLLATE
0x00040000
このフラグは、アプリケーションが複数のコピーと照合順序をサポートしているかどうかを示します。 入力時にこのフラグを設定して、アプリケーションで複数のコピーと照合順序がサポートされていないことを示します。 この場合、PRINTDLG 構造体の nCopies メンバーは常に 1 を返し、PD_COLLATEFlags メンバーに設定されません。

このフラグが設定されていない場合、アプリケーションは複数のコピーの印刷と照合を行います。 この場合、PRINTDLG 構造体の nCopies メンバーは、ユーザーが印刷するコピーの数を示し、Flags メンバーのPD_COLLATE フラグは、ユーザーが照合順序を必要とするかどうかを示します。

このフラグが設定されているかどうかに関係なく、アプリケーションは nCopies から 判断し、 レンダリングするコピーの数と、それらを印刷するかどうかをPD_COLLATEできます。

このフラグが設定されていて、プリンター ドライバーが複数のコピーをサポートしていない場合、 コピー の編集コントロールは無効になります。 同様に、このフラグが設定されていて、プリンター ドライバーで照合順序がサポートされていない場合は、[照合順序のチェック] ボックスは無効になります。

DEVMODE 構造体の dmCopies および dmCollate メンバーには、プリンター ドライバーで使用されるコピーと照合情報が含まれています。 このフラグが設定され、プリンター ドライバーが複数のコピーをサポートしている場合、 dmCopies メンバーは、ユーザーが要求したコピーの数を示します。 このフラグが設定され、プリンター ドライバーが照合順序をサポートしている場合、DEVMODE 構造体の dmCollate メンバーは、ユーザーが照合順序を必要とするかどうかを示します。 このフラグが設定されていない場合、 dmCopies メンバーは常に 1 を返し、 dmCollate メンバーは常に 0 になります。

Windows 2000/XP/2003 の既知の問題:PrintDlg を呼び出す前にこのフラグが設定されていない場合、PrintDlg が返されるときに nCopiesdmCopies の値を入れ替える可能性があります。 この問題の回避策は、値が 1 より大きい場合は dmCopies を使用し、それ以外の場合は nCopies を使用して、 PrintDlg が返されたときに印刷される実際のコピー数を取得します。

 

PrintDlg または PrintDlgEx がDEVMODE 構造体の dmCopies メンバーと dmCollate メンバーの正しい値を確実に返すようにするには、TRUEPD_RETURNDC = 設定し、TRUE PD_USEDEVMODECOPIESANDCOLLATE = します。 そのため、PRINTDLG 構造体の nCopies メンバーは常に 1 で、PD_COLLATEは常に FALSE です

PrintDlg またはPrintDlgExnCopiesPD_COLLATEで正しい値を返すようにするには、TRUEPD_RETURNDC = 設定し、FALSE をPD_USEDEVMODECOPIESANDCOLLATE = します。 そのため、 dmCopies は常に 1 で、 dmCollate は常に FALSE です

Windows Vista および Windows 7 では、printDlg または PrintDlgEx を呼び出し、PD_RETURNDCを TRUE に設定し、PD_USEDEVMODECOPIESANDCOLLATEFALSE に設定すると、PrintDlg 関数または PrintDlgEx 関数は PRINTDLG 構造体の nCopies メンバー内のコピー数を設定し、PRINTDLG 構造体の hDC メンバーで表される構造体内のコピー数を設定します。

GDI の呼び出しを行う場合は、 nCopies の値を無視し、値を 1 と見なし、返された hDC を使用して重複コピーの印刷を回避する必要があります。

nFromPage

種類: WORD

開始ページ編集コントロールの初期値。

PrintDlg が返されると、nFromPage はユーザーによって指定された開始ページです。 ユーザーが [Ok] ボタンをクリックしたときに [ページ] ラジオ ボタンが選択されている場合、PrintDlgPD_PAGENUMS フラグを設定し、ユーザーが最小から最大ページの範囲内にある開始ページ値を入力するまで戻りません。

nFromPage または nToPage の入力値が最小/最大範囲外の場合、PrintDlg、PD_PAGENUMS フラグが指定されている場合にのみエラーを返します。それ以外の場合は、ダイアログ ボックスが表示されますが、範囲外の値は最小値または最大値に変更されます。

nToPage

種類: WORD

終了ページ編集コントロールの初期値。 PrintDlg が返されると、nToPage はユーザーによって指定された終了ページです。 [ ページ ] オプション ボタンが [ Ok ] ボタンをクリックしたときに選択されている場合、 PrintDlgPD_PAGENUMS フラグを設定し、ユーザーがページの最小から最大の範囲内にある終了ページ値を入力するまで戻りません。

nMinPage

種類: WORD

From および To ページ編集コントロールで指定されたページ範囲の最小値。 nMinPage がnMaxPage と等しい場合、[ページ] ラジオ ボタンと開始ページと終了ページ編集コントロールは無効になります。

nMaxPage

種類: WORD

From および To ページ編集コントロールで指定されたページ範囲の最大値。

nCopies

種類: WORD

hDevModeNULL の場合の Copies 編集コントロールの初期コピー数。それ以外の場合は、DEVMODE 構造体の dmCopies メンバーに初期値が含まれます。 PrintDlg が返されると、nCopies には印刷する実際の部数が含まれます。 この値は、アプリケーションまたはプリンター ドライバーが複数のコピーの印刷を担当するかどうかによって異なります。 PD_USEDEVMODECOPIESANDCOLLATE フラグが Flags メンバーに設定されている場合、nCopies は戻り時に常に 1 になり、プリンター ドライバーは複数のコピーを印刷します。 フラグが設定されていない場合、アプリケーションは nCopies で指定された部数を印刷します。 詳細については、 PD_USEDEVMODECOPIESANDCOLLATE フラグの説明を参照してください。

hInstance

種類: HINSTANCE

PD_ENABLEPRINTTEMPLATEまたはPD_ENABLESETUPTEMPLATE フラグが Flags メンバーに設定されている場合、hInstance は、lpPrintTemplateName メンバーまたは lpSetupTemplateName メンバーによって指定されたダイアログ ボックス テンプレートを含むアプリケーションまたはモジュール インスタンスへのハンドルです。

lCustData

型: LPARAM

システムが lpfnPrintHook メンバーまたは lpfnSetupHook メンバーによって識別されるフック プロシージャに渡すアプリケーション定義データ。 システムが WM_INITDIALOG メッセージをフック・プロシージャーに送信する場合、メッセージの lParam パラメーターは、ダイアログの作成時に指定された PRINTDLG 構造体へのポインターです。 フック プロシージャでは、このポインターを使用して lCustData 値を取得できます。

lpfnPrintHook

種類: LPPRINTHOOKPROC

[印刷] ダイアログ ボックス用のメッセージを処理できる PrintHookProc フック プロシージャへのポインター。 フラグ メンバーで PD_ENABLEPRINTHOOK フラグが設定されていない限 り、この メンバーは無視されます。

lpfnSetupHook

種類: LPSETUPHOOKPROC

[印刷設定] ダイアログ ボックス用のメッセージを処理できる SetupHookProc フック プロシージャへのポインター。 PD_ENABLESETUPHOOK フラグがFlags メンバーに設定されていない限り、このメンバーは無視されます。

lpPrintTemplateName

種類: LPCTSTR

hInstance メンバーによって識別されるモジュール内のダイアログ ボックス テンプレート リソースの名前。 このテンプレートは、既定の [印刷 ] ダイアログ ボックス テンプレートに置き換えられます。 PD_ENABLEPRINTTEMPLATE フラグがFlags メンバーに設定されていない限り、このメンバーは無視されます。

lpSetupTemplateName

種類: LPCTSTR

hInstance メンバーによって識別されるモジュール内のダイアログ ボックス テンプレート リソースの名前。 このテンプレートは、既定の [印刷設定] ダイアログ ボックス テンプレートに置き換えられます。 このメンバーは、flags メンバーでPD_ENABLESETUPTEMPLATE フラグが設定されていない限り無視されます。

hPrintTemplate

種類: HGLOBAL

PD_ENABLEPRINTTEMPLATEHANDLE フラグが Flags メンバーに設定されている場合、hPrintTemplate はダイアログ ボックス テンプレートを含むメモリ オブジェクトへのハンドルです。 このテンプレートは、既定の [印刷 ] ダイアログ ボックス テンプレートに置き換えられます。

hSetupTemplate

種類: HGLOBAL

PD_ENABLESETUPTEMPLATEHANDLE フラグが Flags メンバーで設定されている場合、hSetupTemplate はダイアログ ボックス テンプレートを含むメモリ オブジェクトへのハンドルです。 このテンプレートは、既定の [印刷設定] ダイアログ ボックス テンプレートに置き換えられます。

注釈

hDevModehDevName の両方が NULL の場合、PrintDlg は現在の既定のプリンターを使用してダイアログ ボックスを初期化します。 別のプリンターのダイアログ ボックスを初期化するには、DEVNAMES 構造体の wDeviceOffset メンバーを使用してプリンターの名前を指定します。

DEVMODE 構造体の dmDeviceName メンバーもプリンター名を指定します。 ただし、 dmDeviceName は 32 文字に制限されており、 wDeviceOffset 名は使用できません。 wDeviceOffsetdmDeviceName の名前が同じでない場合、PrintDlgwDeviceOffset で指定されたプリンターを使用してダイアログ ボックスを初期化します。

PD_RETURNDEFAULT フラグが設定され、hDevModehDevNames の両方が NULL の場合、PrintDlghDevNames メンバーと hDevMode メンバーを使用して、ダイアログ ボックスを表示せずに現在の既定のプリンターに関する情報を返します。

注意

commdlg.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして PRINTDLG を定義します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
Header commdlg.h (Windows.h を含む)

こちらもご覧ください

共通ダイアログ ボックス ライブラリ

概念

Devmode

DEVNAMES

PrintDlg

リファレンス

WM_INITDIALOG