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 構造体を含む移動可能なグローバル メモリ オブジェクトへのハンドル。 入力時に hDevMode が NULL でない場合は、DEVMODE 構造体に移動可能なメモリ ブロックを割り当て、そのメンバーを初期化する必要があります。 PrintDlgEx 関数は、入力データを使用してプロパティ シート内のコントロールを初期化します。 PrintDlgEx が返されると、DEVMODE メンバーはユーザーの入力を示します。
入力時に hDevMode が NULL の場合、PrintDlgEx は DEVMODE 構造体にメモリを割り当て、そのメンバーを初期化してユーザーの入力を示し、それを識別するハンドルを返します。
hDevMode メンバーと hDevNames メンバーの詳細については、このトピックの最後にある「解説」セクションを参照してください。
hDevNames
種類: HGLOBAL
DEVNAMES 構造体を含む移動可能なグローバル メモリ オブジェクトへのハンドル。 入力時に hDevNames が NULL でない場合は、DEVNAMES 構造体に移動可能なメモリ ブロックを割り当て、そのメンバーを初期化する必要があります。 PrintDlgEx 関数は、入力データを使用してプロパティ シート内のコントロールを初期化します。 PrintDlgEx が返されると、DEVNAMES メンバーには、ユーザーが選択したプリンターの情報が含まれます。 この情報を使用して、デバイス コンテキストまたは情報コンテキストを作成できます。
hDevNames メンバーは NULL にすることができます。この場合、PrintDlgEx は DEVNAMES 構造体にメモリを割り当て、そのメンバーを初期化してユーザーの入力を示し、それを識別するハンドルを返します。
hDevMode メンバーと hDevNames メンバーの詳細については、このトピックの最後にある「解説」セクションを参照してください。
hDC
種類: HDC
Flags メンバーがPD_RETURNDCまたはPC_RETURNICフラグを指定するかどうかに応じて、デバイス コンテキストまたは情報コンテキストへのハンドル。 どちらのフラグも指定されていない場合、このメンバーの値は未定義です。 両方のフラグが指定されている場合、 PD_RETURNDC は優先度を持ちます。 hDC が NULL でない場合は、不要になった GDI オブジェクトを解放するために DeleteDC を呼び出す必要があります。それ以外の場合は、PrintDlgw API を呼び出すたびに GDI オブジェクトがリークします。
Flags
型: DWORD
Print プロパティ シートの初期化に使用できるビット フラグのセット。 PrintDlgEx 関数が返されると、ユーザーの入力を示すようにこれらのフラグが設定されます。 このメンバーには、次の値の 1 つ以上を指定できます。
PrintDlg または PrintDlgEx が DEVMODE 構造体の dmCopies および dmCollate メンバーに正しい値を返すようにするには、TRUEPD_RETURNDC = 設定し、TRUE PD_USEDEVMODECOPIESANDCOLLATE = します。 そのため、PRINTDLG 構造体の nCopies メンバーは常に 1 で、PD_COLLATEは常に FALSE です。
PrintDlg または PrintDlgEx が nCopies とPD_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_PAGENUMS、PD_SELECTION、 およびPD_CURRENTPAGEフラグが指定されていないこと を 示すプレースホルダーとして使用されます。 |
|
このフラグを設定すると、[Collate チェック] ボックスが選択されます。
PrintDlgEx 関数が戻るときにこのフラグが設定されている場合、アプリケーションは複数のコピーの照合順序をシミュレートする必要があります。 詳細については、 PD_USEDEVMODECOPIESANDCOLLATE フラグの説明を参照してください。 「PD_NOPAGENUMS」を参照してください。 |
|
このフラグが設定されている場合は、[ 現在のページ ] ラジオ ボタンが選択されます。 PD_PAGENUMS、PD_SELECTION、またはPD_CURRENTPAGEフラグが設定されていない場合は、[すべて] ラジオ ボタンが選択されます。 |
|
[ファイルに印刷] チェック ボックスを無効にします。 |
|
hInstance メンバーと lpPrintTemplateName メンバーが、[全般] ページの下部にある既定のダイアログ ボックス テンプレートの置換を指定することを示します。 既定のテンプレートには、[ 印刷 ] ダイアログ ボックスと同様のコントロールが含まれています。 システムは、指定されたテンプレートを使用して、[ 全般] ページの子ウィンドウを作成します。 |
|
hInstance メンバーが、事前に読み込まれたダイアログ ボックス テンプレートを含むデータ ブロックを識別することを示します。 このテンプレートは、[ 全般 ] ページの下部にある既定のダイアログ ボックス テンプレートを置き換えます。 システムは、指定されたテンプレートを使用して、[ 全般] ページの子ウィンドウを作成します。 このフラグが指定されている場合、システムは lpPrintTemplateName メンバーを無視します。 |
|
ExclusionFlags メンバーが、プリンター ドライバーのプロパティ ページから除外する項目を識別することを示します。 このフラグが設定されていない場合、プリンター ドライバーのプロパティ ページから既定で項目が除外されます。 除外により、[ 全般] ページ、アプリケーション指定のページ、およびプリンター ドライバー ページ間でのアイテムの重複が防止されます。 |
|
[ファイルに印刷] チェック ボックスを非表示にします。 |
|
[現在のページ] ラジオ ボタンを無効にします。 |
|
[ページ] ラジオ ボタンと関連する編集コントロールを無効にします。 また、[Collate チェック] ボックスがダイアログに表示されます。 |
|
[選択] ラジオ ボタンを無効にします。 |
|
エラーが発生したときに警告メッセージが表示されないようにします。 |
|
このフラグを設定すると、[ ページ ] ラジオ ボタンが選択されます。 PD_PAGENUMS、PD_SELECTION、またはPD_CURRENTPAGEフラグが設定されていない場合は、[すべて] ラジオ ボタンが選択されます。 PrintDlgEx 関数が戻るときにこのフラグが設定されている場合、lpPageRanges メンバーはユーザーが指定したページ範囲を示します。 |
|
このフラグを設定すると、[ファイルチェックに印刷] ボックスが選択されます。 PrintDlgEx が戻るときにこのフラグが設定されている場合、DEVNAMES 構造体の wOutputOffset メンバーによって示されるオフセットには、文字列 "FILE:" が含まれます。 StartDoc 関数を呼び出して印刷操作を開始する場合は、DOCINFO 構造体の lpszOutput メンバーにこの "FILE:" 文字列を指定します。 この文字列を指定すると、出力サブシステムは出力ファイルの名前をユーザーに照会します。 |
|
PrintDlgEx は、ユーザーがプロパティ シートで行った選択に一致するデバイス コンテキストを返します。 デバイス コンテキストは hDC で返されます。 |
|
このフラグが設定されている場合、 PrintDlgEx 関数はプロパティ シートを表示しません。 代わりに、システムの既定のプリンター用に初期化された DEVNAMES および DEVMODE 構造体をハンドルするように hDevNames メンバーと hDevMode メンバーを設定します。 hDevNames と hDevMode の両方が NULL であるか、PrintDlgEx からエラーが返されます。 |
|
PD_RETURNDC フラグと同様に、このフラグを除き、デバイス コンテキストではなく情報コンテキストが返されます。 PD_RETURNDCもPD_RETURNICも指定されていない場合、hDC は出力時に未定義になります。 |
|
このフラグが設定されている場合は、[ 選択] ラジオ ボタンが選択されます。 PD_PAGENUMS、PD_SELECTION、またはPD_CURRENTPAGEフラグが設定されていない場合は、[すべて] ラジオ ボタンが選択されます。 |
|
PD_USEDEVMODECOPIESANDCOLLATEと同じです。 |
|
このフラグは、アプリケーションが複数のコピーと照合順序をサポートしているかどうかを示します。 入力時にこのフラグを設定して、アプリケーションで複数のコピーと照合順序がサポートされていないことを示します。 この場合、PRINTDLGEX 構造体の nCopies メンバーは常に 1 を返し、PD_COLLATEは Flags メンバーに設定されません。
このフラグが設定されていない場合、アプリケーションは複数のコピーの印刷と照合を行います。 この場合、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 メンバーの値を使用します。 |
|
プロパティ シートで [全般 ] ページに大きなテンプレートを強制的に使用します。 大きなテンプレートを使用すると、[ 全般] ページの下部にカスタム テンプレートを指定するアプリケーションの領域が広くなります。 |
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 フラグが指定されていない場合、lpPageRanges は NULL 以外である必要があります。
nMinPage
型: DWORD
Pages 編集コントロールで指定されたページ範囲の最小値。 PD_NOPAGENUMS フラグが指定されている場合、この値は無効です。
nMaxPage
型: DWORD
Pages 編集コントロールで指定されたページ範囲の最大値。 PD_NOPAGENUMS フラグが指定されている場合、この値は無効です。
nCopies
型: DWORD
hDevMode が NULL の場合の Copies 編集コントロールの初期コピー数を格納します。それ以外の場合、DEVMODE 構造体の dmCopies メンバーには初期値が含まれます。 PrintDlgEx が返されると、nCopies には、アプリケーションが印刷する必要がある実際のコピー数が含まれます。 この値は、アプリケーションまたはプリンター ドライバーが複数のコピーの印刷を担当するかどうかによって異なります。 PD_USEDEVMODECOPIESANDCOLLATE フラグが Flags メンバーに設定されている場合、nCopies は戻り値として常に 1 になり、プリンター ドライバーは複数のコピーを印刷します。 フラグが設定されていない場合、アプリケーションは nCopies で指定された部数を印刷する必要があります。 詳細については、 PD_USEDEVMODECOPIESANDCOLLATE フラグの説明を参照してください。
hInstance
種類: HINSTANCE
PD_ENABLEPRINTTEMPLATE フラグが Flags メンバーに設定されている場合、hInstance は lpPrintTemplateName メンバーによって名前付けされたダイアログ ボックス テンプレートを含むアプリケーションまたはモジュール インスタンスへのハンドルです。 PD_ENABLEPRINTTEMPLATEHANDLE フラグが Flags メンバーに設定されている場合、hInstance はダイアログ ボックス テンプレートを含むメモリ オブジェクトへのハンドルです。 Flags メンバーでどちらのテンプレート フラグも設定されていない場合、hInstance は NULL にする必要があります。
lpPrintTemplateName
型: LPCTSTR
hInstance メンバーによって識別されるモジュール内のダイアログ ボックス テンプレート リソースの名前。 このテンプレートは、[ 全般 ] ページの下部にある既定のダイアログ ボックス テンプレートを置き換えます。 既定のテンプレートには、[ 印刷 ] ダイアログ ボックスと同様のコントロールが含まれています。 PD_ENABLEPRINTTEMPLATE フラグが Flags メンバーに設定されていない限り、このメンバーは無視されます。
lpCallback
種類: LPUNKNOWN
アプリケーション定義のコールバック オブジェクトへのポインター。
オブジェクトには、[全般] ページの下部にある子ダイアログ ボックスのメッセージを受信する IPrintDialogCallback クラスが含まれている必要があります。
コールバック オブジェクトには、IPrintDialogServices インターフェイスへのポインターを受け取る IObjectWithSite クラスも含まれている必要があります。 PrintDlgEx 関数は、IID_IPrintDialogCallbackとIID_IObjectWithSiteの両方についてコールバック オブジェクトで IUnknown::QueryInterface を呼び出して、サポートされているインターフェイスを決定します。
コールバック情報を取得しない場合は、 lpCallback を NULL に設定 します。
nPropertyPages
型: DWORD
lphPropertyPages 配列内のプロパティ ページ ハンドルの数。
lphPropertyPages
種類: HPROPSHEETPAGE*
Print プロパティ シートに追加するプロパティ ページ ハンドルの配列を格納します。 追加のプロパティ ページは、[ 全般] ページの後に表示されます。 これらの追加ページを作成するには、 CreatePropertySheetPage 関数を使用します。 PrintDlgEx 関数が戻ると、lphPropertyPages 配列内のすべての HPROPSHEETPAGE ハンドルが破棄されます。 nPropertyPages が 0 の場合、lphPropertyPages は NULL である必要があります。
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 構造体には、ユーザーが指定した情報が含まれています。
解説
hDevMode と hDevName の両方が NULL の場合、PrintDlgEx は現在の既定のプリンターを使用してプロパティ シートを初期化します。 別のプリンターのプロパティ シートを初期化するには、DEVNAMES 構造体の wDeviceOffset メンバーを使用してプリンターの名前を指定します。
DEVMODE 構造体の dmDeviceName メンバーもプリンター名を指定します。 ただし、 dmDeviceName は 32 文字に制限されており、 wDeviceOffset 名は使用できません。 wDeviceOffset 名と dmDeviceName 名が同じでない場合、PrintDlgEx は wDeviceOffset で指定されたプリンターを使用してプロパティ シートを初期化します。
PD_RETURNDEFAULT フラグが設定され、 hDevMode と hDevName の 両方が NULL の場合、 PrintDlgEx は hDevNames メンバーと 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 を含む) |
関連項目
概念
参照