PRINTDLGEXA 構造体 (commdlg.h)

PrintDlgEx 関数が Print プロパティ シートの初期化に使用する情報を格納します。 ユーザーがプロパティ シートを閉じると、システムはこの構造体を使用して、ユーザーの選択に関する情報を返します。

構文

typedef struct tagPDEXA {
  DWORD            lStructSize;
  HWND             hwndOwner;
  HGLOBAL          hDevMode;
  HGLOBAL          hDevNames;
  HDC              hDC;
  DWORD            Flags;
  DWORD            Flags2;
  DWORD            ExclusionFlags;
  DWORD            nPageRanges;
  DWORD            nMaxPageRanges;
  LPPRINTPAGERANGE lpPageRanges;
  DWORD            nMinPage;
  DWORD            nMaxPage;
  DWORD            nCopies;
  HINSTANCE        hInstance;
  LPCSTR           lpPrintTemplateName;
  LPUNKNOWN        lpCallback;
  DWORD            nPropertyPages;
  HPROPSHEETPAGE   *lphPropertyPages;
  DWORD            nStartPage;
  DWORD            dwResultAction;
} PRINTDLGEXA, *LPPRINTDLGEXA;

メンバー

lStructSize

型: DWORD

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

hwndOwner

型: HWND

プロパティ シートを所有するウィンドウへのハンドル。 このメンバーは、有効なウィンドウ ハンドルである必要があります。 NULL にすることはできません。

hDevMode

種類: HGLOBAL

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

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

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

hDevNames

種類: HGLOBAL

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

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

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

hDC

種類: HDC

Flags メンバーがPD_RETURNDCまたはPC_RETURNICフラグを指定するかどうかに応じて、デバイス コンテキストまたは情報コンテキストへのハンドル。 どちらのフラグも指定されていない場合、このメンバーの値は未定義です。 両方のフラグが指定されている場合、 PD_RETURNDC は優先度を持ちます。 hDCNULL でない場合は、不要になった GDI オブジェクトを解放するために DeleteDC を呼び出す必要があります。それ以外の場合は、PrintDlgw API を呼び出すたびに GDI オブジェクトがリークします。

Flags

型: DWORD

Print プロパティ シートの初期化に使用できるビット フラグのセット。 PrintDlgEx 関数が返されると、ユーザーの入力を示すようにこれらのフラグが設定されます。 このメンバーには、次の値の 1 つ以上を指定できます。

PrintDlg または PrintDlgExDEVMODE 構造体の 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 以降では、PrintDlg または PrintDlgEx を呼び出し、PD_RETURNDCTRUE に設定し、PD_USEDEVMODECOPIESANDCOLLATEFALSE に設定すると、PrintDlg 関数または PrintDlgEx 関数は PRINTDLG 構造体の nCopies メンバー内のコピー数を設定し、PRINTDLG 構造体の hDC メンバーによって表される構造体内のコピー数を設定します。

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

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

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

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

PD_CURRENTPAGE
0x00400000
このフラグが設定されている場合は、[ 現在のページ ] ラジオ ボタンが選択されます。 PD_PAGENUMSPD_SELECTION、またはPD_CURRENTPAGEフラグが設定されていない場合は、[すべて] ラジオ ボタンが選択されます。
PD_DISABLEPRINTTOFILE
0x00080000
[ファイルに印刷] チェック ボックスを無効にします。
PD_ENABLEPRINTTEMPLATE
0x00004000
hInstance メンバーと lpPrintTemplateName メンバーが、[全般] ページの下部にある既定のダイアログ ボックス テンプレートの置換を指定することを示します。 既定のテンプレートには、[ 印刷 ] ダイアログ ボックスと同様のコントロールが含まれています。 システムは、指定されたテンプレートを使用して、[ 全般] ページの子ウィンドウを作成します。
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
hInstance メンバーが、事前に読み込まれたダイアログ ボックス テンプレートを含むデータ ブロックを識別することを示します。 このテンプレートは、[ 全般 ] ページの下部にある既定のダイアログ ボックス テンプレートを置き換えます。 システムは、指定されたテンプレートを使用して、[ 全般] ページの子ウィンドウを作成します。 このフラグが指定されている場合、システムは lpPrintTemplateName メンバーを無視します。
PD_EXCLUSIONFLAGS
0x01000000
ExclusionFlags メンバーが、プリンター ドライバーのプロパティ ページから除外する項目を識別することを示します。 このフラグが設定されていない場合、プリンター ドライバーのプロパティ ページから既定で項目が除外されます。 除外により、[ 全般] ページ、アプリケーション指定のページ、およびプリンター ドライバー ページ間でのアイテムの重複が防止されます。
PD_HIDEPRINTTOFILE
0x00100000
[ファイルに印刷] チェック ボックスを非表示にします。
PD_NOCURRENTPAGE
0x00800000
[現在のページ] ラジオ ボタンを無効にします。
PD_NOPAGENUMS
0x00000008
[ページ] ラジオ ボタンと関連する編集コントロールを無効にします。 また、[Collate チェック] ボックスがダイアログに表示されます。
PD_NOSELECTION
0x00000004
[選択] ラジオ ボタンを無効にします。
PD_NOWARNING
0x00000080
エラーが発生したときに警告メッセージが表示されないようにします。
PD_PAGENUMS
0x00000002
このフラグを設定すると、[ ページ ] ラジオ ボタンが選択されます。 PD_PAGENUMSPD_SELECTION、またはPD_CURRENTPAGEフラグが設定されていない場合は、[すべて] ラジオ ボタンが選択されます。 PrintDlgEx 関数が戻るときにこのフラグが設定されている場合、lpPageRanges メンバーはユーザーが指定したページ範囲を示します。
PD_PRINTTOFILE
0x00000020
このフラグを設定すると、[ファイルチェックに印刷] ボックスが選択されます。 PrintDlgEx が戻るときにこのフラグが設定されている場合、DEVNAMES 構造体の wOutputOffset メンバーによって示されるオフセットには、文字列 "FILE:" が含まれます。 StartDoc 関数を呼び出して印刷操作を開始する場合は、DOCINFO 構造体の lpszOutput メンバーにこの "FILE:" 文字列を指定します。 この文字列を指定すると、出力サブシステムは出力ファイルの名前をユーザーに照会します。
PD_RETURNDC
0x00000100
PrintDlgEx は、ユーザーがプロパティ シートで行った選択に一致するデバイス コンテキストを返します。 デバイス コンテキストは hDC で返されます。
PD_RETURNDEFAULT
0x00000400
このフラグが設定されている場合、 PrintDlgEx 関数はプロパティ シートを表示しません。 代わりに、システムの既定のプリンター用に初期化された DEVNAMES および DEVMODE 構造体をハンドルするように hDevNames メンバーと hDevMode メンバーを設定します。 hDevNameshDevMode の両方が NULL であるか、PrintDlgEx からエラーが返されます。
PD_RETURNIC
0x00000200
PD_RETURNDC フラグと同様に、このフラグを除き、デバイス コンテキストではなく情報コンテキストが返されます。 PD_RETURNDCPD_RETURNICも指定されていない場合、hDC は出力時に未定義になります。
PD_SELECTION
0x00000001
このフラグが設定されている場合は、[ 選択] ラジオ ボタンが選択されます。 PD_PAGENUMSPD_SELECTION、またはPD_CURRENTPAGEフラグが設定されていない場合は、[すべて] ラジオ ボタンが選択されます。
PD_USEDEVMODECOPIES
0x00040000
PD_USEDEVMODECOPIESANDCOLLATEと同じです。
PD_USEDEVMODECOPIESANDCOLLATE
0x00040000
このフラグは、アプリケーションが複数のコピーと照合順序をサポートしているかどうかを示します。 入力時にこのフラグを設定して、アプリケーションで複数のコピーと照合順序がサポートされていないことを示します。 この場合、PRINTDLGEX 構造体の nCopies メンバーは常に 1 を返し、PD_COLLATEFlags メンバーに設定されません。

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

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

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

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

Windows Vista より前の Windows バージョンでは、呼び出し元のアプリケーションでこのフラグが設定されておらず、DEVMODE 構造体の dmCopies メンバーが 1 より大きい場合は、その値をコピー数に使用します。それ以外の場合は、PRINTDLGEX 構造体の nCopies メンバーの値を使用します。

PD_USELARGETEMPLATE
0x10000000
プロパティ シートで [全般 ] ページに大きなテンプレートを強制的に使用します。 大きなテンプレートを使用すると、[ 全般] ページの下部にカスタム テンプレートを指定するアプリケーションの領域が広くなります。

Flags2

型: DWORD

ExclusionFlags

型: DWORD

Print プロパティ シートのプリンター ドライバー プロパティ ページから項目を除外できるビット フラグのセット。 この値は、 PD_EXCLUSIONFLAGS フラグが Flags メンバーに設定されている場合にのみ使用されます。 除外フラグは、除外する項目が [全般 ] ページまたは Print プロパティ シートのアプリケーション定義ページに含まれる場合にのみ使用する必要があります。 このメンバーは、次のフラグを指定できます。

PD_EXCL_COPIESANDCOLLATE

Print プロパティ シートのプリンター ドライバーのプロパティ ページから、コピーコントロールと Collate コントロールを除外します。 このフラグは、アプリケーションが Print プロパティ シートの [全般] ページの下部で提供される既定の [コピー] コントロールと [Collate] コントロールを使用する場合に常に設定する必要があります。

nPageRanges

型: DWORD

入力時に、このメンバーを lpPageRanges 配列で指定されたページ範囲の初期数に設定します。 PrintDlgEx 関数が戻ると、nPageRanges は lpPageRanges 配列に格納されているユーザー指定のページ範囲の数示します。 PD_NOPAGENUMS フラグが指定されている場合、この値は無効です。

nMaxPageRanges

型: DWORD

lpPageRanges バッファーの配列要素のサイズ。 この値は、配列に格納できるページ範囲の最大数を示します。 PD_NOPAGENUMS フラグが指定されている場合、この値は無効です。 PD_NOPAGENUMS フラグを指定しない場合、この値は 0 より大きくする必要があります。

lpPageRanges

種類: LPPRINTPAGERANGE

PRINTPAGERANGE 構造体の配列を含むバッファーへのポインター。 入力時に、配列には Pages 編集コントロール に表示する初期ページ範囲が含まれます。 PrintDlgEx 関数が戻るとき、配列にはユーザーが指定したページ範囲が含まれます。 PD_NOPAGENUMS フラグが指定されている場合、この値は無効です。 PD_NOPAGENUMS フラグが指定されていない場合、lpPageRangesNULL 以外である必要があります。

nMinPage

型: DWORD

Pages 編集コントロールで指定されたページ範囲の最小値。 PD_NOPAGENUMS フラグが指定されている場合、この値は無効です。

nMaxPage

型: DWORD

Pages 編集コントロールで指定されたページ範囲の最大値。 PD_NOPAGENUMS フラグが指定されている場合、この値は無効です。

nCopies

型: DWORD

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

hInstance

種類: HINSTANCE

PD_ENABLEPRINTTEMPLATE フラグが Flags メンバーに設定されている場合、hInstancelpPrintTemplateName メンバーによって名前付けされたダイアログ ボックス テンプレートを含むアプリケーションまたはモジュール インスタンスへのハンドルです。 PD_ENABLEPRINTTEMPLATEHANDLE フラグが Flags メンバーに設定されている場合、hInstance はダイアログ ボックス テンプレートを含むメモリ オブジェクトへのハンドルです。 Flags メンバーでどちらのテンプレート フラグも設定されていない場合、hInstanceNULL にする必要があります。

lpPrintTemplateName

型: LPCTSTR

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

lpCallback

種類: LPUNKNOWN

アプリケーション定義のコールバック オブジェクトへのポインター。

オブジェクトには、[全般] ページの下部にある子ダイアログ ボックスのメッセージを受信する IPrintDialogCallback クラスが含まれている必要があります。

コールバック オブジェクトには、IPrintDialogServices インターフェイスへのポインターを受け取る IObjectWithSite クラスも含まれている必要があります。 PrintDlgEx 関数は、IID_IPrintDialogCallbackIID_IObjectWithSiteの両方についてコールバック オブジェクトで IUnknown::QueryInterface を呼び出して、サポートされているインターフェイスを決定します。

コールバック情報を取得しない場合は、 lpCallback を NULL に設定 します

nPropertyPages

型: DWORD

lphPropertyPages 配列内のプロパティ ページ ハンドルの数。

lphPropertyPages

種類: HPROPSHEETPAGE*

Print プロパティ シートに追加するプロパティ ページ ハンドルの配列を格納します。 追加のプロパティ ページは、[ 全般] ページの後に表示されます。 これらの追加ページを作成するには、 CreatePropertySheetPage 関数を使用します。 PrintDlgEx 関数が戻ると、lphPropertyPages 配列内のすべての HPROPSHEETPAGE ハンドルが破棄されます。 nPropertyPages が 0 の場合、lphPropertyPagesNULL である必要があります。

nStartPage

型: DWORD

最初に表示されるプロパティ ページ。 [全般] ページを表示するには、START_PAGE_GENERALを指定します。 それ以外の場合は、 lphPropertyPages メンバーで指定された配列内のプロパティ ページの 0 から始まるインデックスを指定します。 一貫性を保つには、[ 全般] ページでプロパティ シートを常に開始することをお勧めします。

dwResultAction

型: DWORD

入力時に、このメンバーを 0 に設定します。 PrintDlgEx 関数がS_OKを返す場合、dwResultAction にはダイアログの結果が含まれます。 PrintDlgEx がエラーを返す場合、このメンバーは無視する必要があります。 dwResultAction メンバーには、次のいずれかの値を指定できます。

PD_RESULT_APPLY

ユーザーが [ 適用 ] ボタンをクリックし、後で [キャンセル ] ボタンをクリックしました。 これは、ユーザーがプロパティ シートで行われた変更を適用したいが、まだ印刷したくないことを示します。 PRINTDLGEX 構造体には、[適用] ボタンがクリックされた時点でユーザーが指定した情報が含まれます。

PD_RESULT_CANCEL

ユーザーが [ キャンセル ] ボタンをクリックしました。 PRINTDLGEX 構造体の情報は変更されません。

PD_RESULT_PRINT

ユーザーが [ 印刷 ] ボタンをクリックしました。 PRINTDLGEX 構造体には、ユーザーが指定した情報が含まれています。

解説

hDevModehDevName の両方が NULL の場合、PrintDlgEx は現在の既定のプリンターを使用してプロパティ シートを初期化します。 別のプリンターのプロパティ シートを初期化するには、DEVNAMES 構造体の wDeviceOffset メンバーを使用してプリンターの名前を指定します。

DEVMODE 構造体の dmDeviceName メンバーもプリンター名を指定します。 ただし、 dmDeviceName は 32 文字に制限されており、 wDeviceOffset 名は使用できません。 wDeviceOffset 名と dmDeviceName 名が同じでない場合、PrintDlgExwDeviceOffset で指定されたプリンターを使用してプロパティ シートを初期化します。

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

PrintDlgEx の実行中に、PRINTDLGEX 構造体で指定した DEVMODE および DEVNAMES 構造体に、常に現在のデータが含まれているとは限りません。 このため、初期ページのアプリケーション固有のプロパティ ページと IPrintDialogCallback ルーチンは 、IPrintDialogServices インターフェイスを使用して、現在のプリンターの状態に関する情報を取得する必要があります。

注意

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

要件

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

関連項目

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

概念

Devmode

DEVNAMES

IPrintDialogCallback

IPrintDialogServices

PrintDlgEx

参照