CPrintDialog
クラス
Windows のコモン ダイアログ ボックスである [印刷] ダイアログで提供されるサービスをカプセル化したものです。
構文
class CPrintDialog : public CCommonDialog
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CPrintDialog::CPrintDialog |
CPrintDialog オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CPrintDialog::CreatePrinterDC |
[印刷] ダイアログ ボックスを表示せずに、プリンター デバイス コンテキストを作成します。 |
CPrintDialog::DoModal |
ダイアログ ボックスを表示し、ユーザーが選択できるようにします。 |
CPrintDialog::GetCopies |
要求されたコピーの数を取得します。 |
CPrintDialog::GetDefaults |
ダイアログ ボックスを表示せずに、デバイスの既定値を取得します。 |
CPrintDialog::GetDeviceName |
現在選択されているプリンター デバイスの名前を取得します。 |
CPrintDialog::GetDevMode |
構造体を取得します DEVMODE 。 |
CPrintDialog::GetDriverName |
現在選択されているプリンター ドライバーの名前を取得します。 |
CPrintDialog::GetFromPage |
印刷範囲の開始ページを取得します。 |
CPrintDialog::GetPortName |
現在選択されているプリンター ポートの名前を取得します。 |
CPrintDialog::GetPrinterDC |
プリンター デバイス コンテキストへのハンドルを取得します。 |
CPrintDialog::GetToPage |
印刷範囲の終了ページを取得します。 |
CPrintDialog::PrintAll |
文書のすべてのページを印刷するかどうかを指定します。 |
CPrintDialog::PrintCollate |
照合されたコピーを要求するかどうかを決定します。 |
CPrintDialog::PrintRange |
指定した範囲のページのみを印刷するかどうかを決定します。 |
CPrintDialog::PrintSelection |
現在選択されている項目のみを印刷するかどうかを指定します。 |
パブリック データ メンバー
名前 | 説明 |
---|---|
CPrintDialog::m_pd |
オブジェクトをカスタマイズするために使用される CPrintDialog 構造体。 |
解説
一般的な印刷ダイアログ ボックスは、Windows 標準と一致する方法で印刷と印刷のセットアップダイアログ ボックスを実装する簡単な方法を提供します。
Note
このクラスは CPrintDialogEx
、Windows Print プロパティ シートによって提供されるサービスをカプセル化します。 詳細については、CPrintDialogEx
の概要を参照してください。
CPrintDialog
の機能は、印刷設定とページ設定の CPageSetupDialog
両方に共通のダイアログ ボックスを提供するように設計されています。
フレームワークに依存して、アプリケーションの印刷プロセスのさまざまな側面を処理できます。 この場合、フレームワークによって、印刷用の Windows 共通ダイアログ ボックスが自動的に表示されます。 アプリケーションの印刷処理をフレームワークに設定することもできますが、一般的な [印刷] ダイアログ ボックスを独自の印刷ダイアログ ボックスでオーバーライドすることもできます。 フレームワークを使用して印刷タスクを処理する方法の詳細については、印刷に関する記事を参照してください。
フレームワークが関与せずにアプリケーションで印刷を処理する場合は、指定されたコンストラクターで "そのまま" クラスを使用 CPrintDialog
するか、独自のダイアログ クラス CPrintDialog
を派生させ、ニーズに合わせてコンストラクターを記述することができます。 どちらの場合も、これらのダイアログ ボックスはクラス CCommonDialog
から派生しているため、標準の MFC ダイアログ ボックスと同様に動作します。
オブジェクトを CPrintDialog
使用するには、まずコンストラクターを使用してオブジェクトを CPrintDialog
作成します。 ダイアログ ボックスが作成されたら、構造体内の任意の値を m_pd
設定または変更して、ダイアログ ボックスのコントロールの値を初期化できます。 構造体は m_pd
型 PRINTDLG
です。 この構造の詳細については、Windows SDK を参照してください。
独自のm_pd
hDevMode
ハンドルをメンバーにhDevNames
指定しない場合は、ダイアログ ボックスが完了したら、これらのハンドルに対して Windows 関数GlobalFree
を呼び出してください。 提供されるフレームワークの印刷セットアップの実装 CWinApp::OnFilePrintSetup
を使用する場合、これらのハンドルを解放する必要はありません。 ハンドルはメインによって保持されCWinApp
、's デストラクター' でCWinApp
解放されます。 スタンドアロンを使用 CPrintDialog
する場合は、これらのハンドルを解放するだけで済みます。
ダイアログ ボックス コントロールを初期化した後、メンバー関数を DoModal
呼び出してダイアログ ボックスを表示し、ユーザーが印刷オプションを選択できるようにします。 DoModal
は、ユーザーが [OK] () または [キャンセル] (IDCANCEL
IDOK
) ボタンを選択したかどうかを返します。
戻り値がIDOK
返された場合DoModal
は、いずれかのCPrintDialog
メンバー関数を使用して、ユーザーが入力した情報を取得できます。
この CPrintDialog::GetDefaults
メンバー関数は、ダイアログ ボックスを表示せずに、現在のプリンターの既定値を取得する場合に便利です。 このメンバー関数では、ユーザーの操作は必要ありません。
Windows CommDlgExtendedError
関数を使用すると、ダイアログ ボックスの初期化中にエラーが発生したかどうかを確認したり、エラーの詳細を確認したりできます。 この関数の詳細については、Windows SDK を参照してください。
CPrintDialog
は、 COMMDLG.DLL
Windows バージョン 3.1 以降に付属するファイルに依存しています。
ダイアログ ボックスをカスタマイズするには、クラスを CPrintDialog
派生させ、カスタム ダイアログ テンプレートを指定し、拡張コントロールからの通知メッセージを処理するメッセージ マップを追加します。 未処理のメッセージは、基底クラスに渡す必要があります。 フック関数をカスタマイズする必要はありません。
ダイアログ ボックスが [印刷] または [印刷の設定] のどちらであるかによって同じメッセージを異なる方法で処理するには、ダイアログ ボックスごとにクラスを派生させる必要があります。 また、[印刷] ダイアログ ボックスで [印刷設定] ボタンが選択されている場合に新しいダイアログ ボックスの作成を処理する Windows AttachOnSetup
関数をオーバーライドする必要があります。
使用CPrintDialog
の詳細については、「共通ダイアログ クラス」を参照してください。
継承階層
CPrintDialog
必要条件
ヘッダー:afxdlgs.h
CPrintDialog::CPrintDialog
Windows 印刷または印刷設定ダイアログ オブジェクトを構築します。
CPrintDialog(
BOOL bPrintSetupOnly,
DWORD dwFlags = PD_ALLPAGES | PD_USEDEVMODECOPIES | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE | PD_NOSELECTION,
CWnd* pParentWnd = NULL);
パラメーター
bPrintSetupOnly
標準の [Windows 印刷] ダイアログ ボックスまたは [印刷設定] ダイアログ ボックスを表示するかどうかを指定します。 このパラメーターを設定すると TRUE
、標準の [Windows 印刷設定] ダイアログ ボックスが表示されます。 FALSE
[Windows 印刷] ダイアログ ボックスを表示するように設定します。 オンのFALSE
場合bPrintSetupOnly
、[印刷] ダイアログ ボックスに [印刷設定] オプション ボタンが引き続き表示されます。
dwFlags
ビットごとの OR 演算子を使用して、ダイアログ ボックスの設定をカスタマイズするために使用できる 1 つ以上のフラグ。 たとえば、このフラグは PD_ALLPAGES
、既定の印刷範囲を文書のすべてのページに設定します。 これらのフラグの PRINTDLG
詳細については、Windows SDK の構造を参照してください。
pParentWnd
ダイアログ ボックスの親ウィンドウまたは所有者ウィンドウへのポインター。
解説
このメンバー関数は、オブジェクトのみを構築します。 ダイアログ ボックスを DoModal
表示するには、メンバー関数を使用します。
set をFALSE
指定してコンストラクターbPrintSetupOnly
を呼び出すと、PD_RETURNDC
フラグが自動的に使用されることに注意してください。 をGetDefaults
呼び出DoModal
した後、またはGetPrinterDC
プリンター DC が返されますm_pd.hDC
。 この DC は、呼び出し元CPrintDialog
が呼び出DeleteDC
して解放する必要があります。
例
// Display the Windows Print dialog box with "All" radio button
// initially selected. All other radio buttons are disabled.
CPrintDialog dlg1(FALSE);
// Display the Windows Print dialog box with Collate check box checked.
CPrintDialog dlg2(FALSE, PD_ALLPAGES | PD_COLLATE | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE);
// Display the Windows Print dialog box with "Selection" radio
// button initially selected. "All" radio button is enabled
// but "Pages" radio button is disabled.
CPrintDialog dlg3(FALSE, PD_SELECTION | PD_USEDEVMODECOPIES);
CPrintDialog::CreatePrinterDC
および構造体からプリンター デバイス コンテキスト (DC) をDEVMODE
DEVNAMES
作成します。
HDC CreatePrinterDC();
戻り値
新しく作成されたプリンター デバイス コンテキストを処理します。
解説
この DC は現在のプリンター DC と見なされ、以前に取得した他のプリンター DC はユーザーが削除する必要があります。 この関数を呼び出し、結果の DC を使用することができます。印刷ダイアログ ボックスは表示しません。
例
// Display the Windows Print dialog box with "All" radio button
// initially selected. All other radio buttons are disabled.
CPrintDialog dlg(FALSE);
if (dlg.DoModal() == IDOK)
{
// Create a printer device context (DC) based on the information
// selected from the Print dialog.
HDC hdc = dlg.CreatePrinterDC();
ASSERT(hdc);
}
CPrintDialog::DoModal
Windows の一般的な印刷ダイアログ ボックスを表示し、ユーザーは、部数、ページ範囲、コピーを照合するかどうかなど、さまざまな印刷オプションを選択できます。
virtual INT_PTR DoModal();
戻り値
IDOK
または IDCANCEL
。 返された場合 IDCANCEL
は、Windows CommDlgExtendedError
関数を呼び出して、エラーが発生したかどうかを判断します。
IDOK
はIDCANCEL
、ユーザーが [OK] または [キャンセル] ボタンを選択したかどうかを示す定数です。
解説
構造体のメンバーを設定して、さまざまな印刷ダイアログ オプションを m_pd
初期化する場合は、呼び出す DoModal
前に、ダイアログ オブジェクトが構築された後にこれを行う必要があります。
呼び出した DoModal
後、他のメンバー関数を呼び出して、ユーザーがダイアログ ボックスに入力した設定または情報を取得できます。
set をFALSE
指定してコンストラクターbPrintSetupOnly
を呼び出すと、PD_RETURNDC
フラグが自動的に使用されることに注意してください。 をGetDefaults
呼び出DoModal
した後、またはGetPrinterDC
プリンター DC が返されますm_pd.hDC
。 この DC は、呼び出し元CPrintDialog
が呼び出DeleteDC
して解放する必要があります。
例
CPrintDialog::CreatePrinterDC
の例を参照してください。
CPrintDialog::GetCopies
要求されたコピーの数を取得します。
int GetCopies() const;
戻り値
要求されたコピーの数。
解説
呼び出し後にこの関数を呼び出 DoModal
して、要求されたコピーの数を取得します。
例
CPrintDialog::PrintCollate
の例を参照してください。
CPrintDialog::GetDefaults
ダイアログ ボックスを表示せずに、既定のプリンターのデバイスの既定値を取得します。
BOOL GetDefaults();
戻り値
関数が成功した場合は 0 以外。それ以外の場合は 0。
解説
取得した値は構造体に m_pd
配置されます。
場合によっては、この関数の呼び出しでコンストラクターが呼び出され、bPrintSetupOnly
with set to FALSE
.CPrintDialog
このような場合、プリンター DC と hDevNames
hDevMode
(データ メンバーに m_pd
配置されている 2 つのハンドル) が自動的に割り当てられます。
コンストラクターCPrintDialog
が次の値にFALSE
設定された状態でbPrintSetupOnly
呼び出された場合、この関数は呼び出し元に戻りhDevNames
、呼び出しhDevMode
m_pd.hDevMode
元にm_pd.hDevNames
配置されるだけでなく、プリンター DC m_pd.hDC
も返されます。 オブジェクトの操作が完了したら、呼び出し元がプリンター DC を削除し、ハンドルで Windows GlobalFree
関数を CPrintDialog
呼び出す必要があります。
例
このコード フラグメントは、既定のプリンターのデバイス コンテキストを取得し、プリンターの解像度を 1 インチあたりのドット数でユーザーに報告します。 (プリンターの機能のこの属性は、多くの場合、DPI と呼ばれます)。
CPrintDialog dlg(FALSE);
if (!dlg.GetDefaults())
{
AfxMessageBox(_T("You have no default printer!"));
}
else
{
// attach to the DC we were given
CDC dc;
dc.Attach(dlg.m_pd.hDC);
// ask for the measurements
int nHorz = dc.GetDeviceCaps(LOGPIXELSX);
int nVert = dc.GetDeviceCaps(LOGPIXELSY);
// almost always the same in both directions, but sometimes not!
CString str;
if (nHorz == nVert)
{
str.Format(_T("Your printer supports %d pixels per inch"), nHorz);
}
else
{
str.Format(_T("Your printer supports %d pixels per inch ")
_T("horizontal resolution, and %d pixels per inch vertical ")
_T("resolution"), nHorz, nVert);
}
// tell the user
AfxMessageBox(str);
// Note: no need to call Detach() because we want the CDC destructor
// to call FreeDC() on the DC we borrowed from the common dialog
}
CPrintDialog::GetDeviceName
現在選択されているプリンター デバイスの名前を取得します。
CString GetDeviceName() const;
戻り値
現在選択されているプリンターの名前。
解説
現在選択されているプリンターの名前を取得するために呼び出した後、または呼び出 DoModal
し後にこの関数を呼び出 GetDefaults
して、既定のプリンターの現在のデバイスの既定値を取得します。 への呼び出しのCString
値lpszDeviceName
として返されるGetDeviceName
オブジェクトへのポインターを使用しますCDC::CreateDC
。
例
このコード フラグメントは、ユーザーの既定のプリンター名と接続されているポートと、プリンターが使用するスプーラー名を示しています。 このコードには、"既定のプリンターは winspool を使用して \\server\share の HP LaserJet IIIP です" というメッセージ ボックスが表示される場合があります。
CPrintDialog dlg(FALSE);
if (!dlg.GetDefaults())
{
AfxMessageBox(_T("You have no default printer!"));
}
else
{
CString strDescription;
strDescription.Format(_T("Your default printer is %s on %s using %s."),
(LPCTSTR)dlg.GetDeviceName(),
(LPCTSTR)dlg.GetPortName(),
(LPCTSTR)dlg.GetDriverName());
AfxMessageBox(strDescription);
}
CPrintDialog::GetDevMode
構造体を取得します DEVMODE
。
LPDEVMODE GetDevMode() const;
戻り値
DEVMODE
データ構造。印刷ドライバーのデバイスの初期化と環境に関する情報が含まれます。 Windows SDK で説明されている Windows GlobalUnlock
関数を使用して、この構造体によって取得されたメモリのロックを解除する必要があります。
解説
この関数は、印刷デバイスに関する情報を呼び出した後、またはGetDefaults
取得した後で呼び出DoModal
します。
例
CPrintDialog::PrintCollate
の例を参照してください。
CPrintDialog::GetDriverName
現在選択されているプリンター ドライバーの名前を取得します。
CString GetDriverName() const;
戻り値
CString
システム定義ドライバー名を指定します。
解説
この関数は、システム定義プリンター デバイス ドライバーの名前を呼び出した後、またはGetDefaults
取得した後に呼び出DoModal
します。 への呼び出しのCString
値lpszDriverName
として返されるGetDriverName
オブジェクトへのポインターを使用しますCDC::CreateDC
。
例
CPrintDialog::GetDeviceName
の例を参照してください。
CPrintDialog::GetFromPage
印刷範囲の開始ページを取得します。
int GetFromPage() const;
戻り値
印刷するページの範囲の開始ページ番号。
解説
呼び出し後にこの関数を呼び出 DoModal
して、印刷するページの範囲内の開始ページ番号を取得します。
例
CPrintDialog::m_pd
の例を参照してください。
CPrintDialog::GetPortName
現在選択されているプリンター ポートの名前を取得します。
CString GetPortName() const;
戻り値
現在選択されているプリンター ポートの名前。
解説
この関数は、呼び出し後に呼び出 DoModal
すか GetDefaults
、現在選択されているプリンター ポートの名前を取得します。
例
CPrintDialog::GetDeviceName の例を参照してください。
CPrintDialog::GetPrinterDC
プリンター デバイス コンテキストへのハンドルを取得します。
HDC GetPrinterDC() const;
戻り値
成功した場合のプリンター デバイス コンテキストへのハンドル。それ以外の場合 NULL
は .
解説
コンストラクターのbPrintSetupOnly
CPrintDialog
パラメーターが FALSE
([印刷] ダイアログ ボックスが表示されていることを示す) 場合は、GetPrinterDC
プリンター のデバイス コンテキストにハンドルを返します。 使い終わったら、Windows DeleteDC
関数を呼び出してデバイス コンテキストを削除する必要があります。
例
CPrintDialog dlg(FALSE);
CPrintDialog dlg(FALSE);
if (dlg.DoModal() == IDOK)
{
// Get a handle to the printer device context (DC).
HDC hdc = dlg.GetPrinterDC();
ASSERT(hdc);
// Do something with the HDC...
// Clean up.
CDC::FromHandle(hdc)->DeleteDC();
}
CPrintDialog::GetToPage
印刷範囲の終了ページを取得します。
int GetToPage() const;
戻り値
印刷するページの範囲内の終了ページ番号。
解説
呼び出し後にこの関数を呼び出 DoModal
して、印刷するページの範囲内の終了ページ番号を取得します。
例
CPrintDialog::m_pd
の例を参照してください。
CPrintDialog::m_pd
ダイアログ オブジェクトの特性を格納するメンバーを持つ構造体。
PRINTDLG& m_pd;
解説
オブジェクトをCPrintDialog
構築した後、メンバー関数を呼び出す前に、ダイアログ ボックスのさまざまな側面をDoModal
設定するために使用m_pd
できます。 構造の m_pd
詳細については、Windows SDK を参照してください PRINTDLG
。
データ メンバーを m_pd
直接変更する場合は、既定の動作をオーバーライドします。
例
// Display the Windows Print dialog box with "Pages" radio button
// initially selected. "All" and "Pages" radio buttons are
// enabled as well.
CPrintDialog dlg(FALSE, PD_PAGENUMS | PD_USEDEVMODECOPIES);
dlg.m_pd.nMinPage = dlg.m_pd.nFromPage = 1;
dlg.m_pd.nMaxPage = dlg.m_pd.nToPage = 10;
if (dlg.DoModal() == IDOK)
{
// Determine the starting and ending page numbers for the range
// of pages to be printed.
int from_page = -1, to_page = -1;
if (dlg.PrintAll()) // print all pages in the document
{
from_page = dlg.m_pd.nMinPage;
to_page = dlg.m_pd.nMaxPage;
}
else if (dlg.PrintRange()) // print only a range of pages
{ // in the document
from_page = dlg.GetFromPage();
to_page = dlg.GetToPage();
}
else if (dlg.PrintSelection()) // print only the currently selected
// items
{
from_page = to_page = -1; // -1 to denote unknown yet
}
TRACE(_T("Print from %d to %d\n"), from_page, to_page);
}
CPrintDialog::PrintAll
文書のすべてのページを印刷するかどうかを指定します。
BOOL PrintAll() const;
戻り値
文書内のすべてのページを印刷する場合は 0 以外。それ以外の場合は 0。
解説
この関数は、文書内のすべてのページを印刷するかどうかを決定する呼び出しの後に呼び出 DoModal
します。
例
CPrintDialog::m_pd
の例を参照してください。
CPrintDialog::PrintCollate
照合されたコピーを要求するかどうかを決定します。
BOOL PrintCollate() const;
戻り値
ユーザーがダイアログ ボックスで照合チェック ボックスを選択した場合は 0 以外、それ以外の場合は 0。
解説
この関数は、プリンターが文書のすべての印刷コピーを照合する必要があるかどうかを判断するために呼び出した後に呼び出 DoModal
します。
例
// Display the Windows Print dialog box with Collate check box checked.
CPrintDialog dlg(FALSE, PD_ALLPAGES | PD_COLLATE | PD_NOPAGENUMS |
PD_HIDEPRINTTOFILE);
if (dlg.DoModal() == IDOK)
{
// If the collate check box is selected, then GetCopies() will return
// the number of copies printed. Otherwise, GetCopies() always
// returns 1. Then, the number of copies printed can be found from the
// DEVMODE structure of the printing device.
if (dlg.PrintCollate())
{
int num = dlg.GetCopies();
TRACE(_T("Number of copies printed = %d\n"), num);
}
else
{
LPDEVMODE devmode = dlg.GetDevMode();
TRACE(_T("Number of copies printed = %d\n"), devmode->dmCopies);
}
}
CPrintDialog::PrintRange
指定した範囲のページのみを印刷するかどうかを決定します。
BOOL PrintRange() const;
戻り値
文書内のページの範囲のみを印刷する場合は 0 以外。それ以外の場合は 0。
解説
この関数は、文書内のページの範囲のみを印刷するかどうかを判断する呼び出し後に呼び出 DoModal
します。
例
CPrintDialog::m_pd
の例を参照してください。
CPrintDialog::PrintSelection
現在選択されている項目のみを印刷するかどうかを指定します。
BOOL PrintSelection() const;
戻り値
選択した項目のみを印刷する場合は 0 以外。それ以外の場合は 0。
解説
現在選択されている項目のみを印刷するかどうかを判断するには、呼び出し後にこの関数を呼び出 DoModal
します。
例
CPrintDialog::m_pd
の例を参照してください。
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示