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 共通ダイアログ ボックスが自動的に表示されます。 アプリケーションの印刷処理をフレームワークに設定することもできますが、一般的な [印刷] ダイアログ ボックスを独自の印刷ダイアログ ボックスでオーバーライドすることもできます。 フレームワークを使用して印刷タスクを処理する方法の詳細については、 Printingに関する記事を参照してください。
フレームワークを使用せずにアプリケーションで印刷を処理する場合は、指定されたコンストラクターで CPrintDialog
クラスをそのまま使用するか、 CPrintDialog
から独自のダイアログ クラスを派生させ、ニーズに合わせてコンストラクターを記述することができます。 どちらの場合も、これらのダイアログ ボックスはクラス CCommonDialog
から派生しているため、標準の MFC ダイアログ ボックスと同様に動作します。
CPrintDialog
オブジェクトを使用するには、まず、CPrintDialog
コンストラクターを使用してオブジェクトを作成します。 ダイアログ ボックスが作成されたら、 m_pd
構造体の値を設定または変更して、ダイアログ ボックスのコントロールの値を初期化できます。 m_pd
構造体はPRINTDLG
型です。 この構造の詳細については、Windows SDK を参照してください。
hDevMode
およびhDevNames
メンバーのm_pd
で独自のハンドルを指定しない場合は、ダイアログ ボックスが完了したら、これらのハンドルに対して Windows 関数GlobalFree
を呼び出してください。 CWinApp::OnFilePrintSetup
によって提供されるフレームワークの印刷セットアップの実装を使用する場合、これらのハンドルを解放する必要はありません。 ハンドルは CWinApp
によって維持され、 CWinApp
のデストラクターで解放されます。 CPrintDialog
スタンドアロンを使用する場合にのみ、これらのハンドルを解放する必要があります。
ダイアログ ボックス コントロールを初期化した後、 DoModal
メンバー関数を呼び出してダイアログ ボックスを表示し、ユーザーが印刷オプションを選択できるようにします。 DoModal
は、ユーザーが OK (IDOK
) または Cancel (IDCANCEL
) ボタンを選択したかどうかを返します。
DoModal
がIDOK
を返す場合は、CPrintDialog
のいずれかのメンバー関数を使用して、ユーザーが入力した情報を取得できます。
CPrintDialog::GetDefaults
メンバー関数は、ダイアログ ボックスを表示せずに、現在のプリンターの既定値を取得する場合に便利です。 このメンバー関数では、ユーザーの操作は必要ありません。
Windows CommDlgExtendedError
関数を使用すると、ダイアログ ボックスの初期化中にエラーが発生したかどうかを判断し、エラーの詳細を確認できます。 この関数の詳細については、Windows SDK を参照してください。
CPrintDialog
は、Windows バージョン 3.1 以降に付属する COMMDLG.DLL
ファイルに依存しています。
ダイアログ ボックスをカスタマイズするには、 CPrintDialog
からクラスを派生させ、カスタム ダイアログ テンプレートを指定し、メッセージ マップを追加して拡張コントロールからの通知メッセージを処理します。 未処理のメッセージは、基底クラスに渡す必要があります。 フック関数をカスタマイズする必要はありません。
ダイアログ ボックスが [印刷] または [印刷の設定] のどちらであるかによって同じメッセージを異なる方法で処理するには、ダイアログ ボックスごとにクラスを派生させる必要があります。 また、Windows AttachOnSetup
関数をオーバーライドする必要があります。この関数は、[印刷] ダイアログ ボックスで [印刷設定] ボタンが選択されている場合に新しいダイアログ ボックスの作成を処理します。
CPrintDialog
の使用方法の詳細については、「Common ダイアログ クラスを参照してください。
継承階層
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 印刷設定] ダイアログ ボックスが表示されます。 [Windows 印刷] ダイアログ ボックスを表示するには、 FALSE
に設定します。 bPrintSetupOnly
がFALSE
されている場合は、[印刷] ダイアログ ボックスに [印刷設定] オプション ボタンが表示されます。
dwFlags
ビットごとの OR 演算子を使用して、ダイアログ ボックスの設定をカスタマイズするために使用できる 1 つ以上のフラグ。 たとえば、 PD_ALLPAGES
フラグは、文書のすべてのページに既定の印刷範囲を設定します。 これらのフラグの詳細については、Windows SDK の PRINTDLG
構造を参照してください。
pParentWnd
ダイアログ ボックスの親ウィンドウまたは所有者ウィンドウへのポインター。
解説
このメンバー関数は、オブジェクトのみを構築します。 DoModal
メンバー関数を使用して、ダイアログ ボックスを表示します。
bPrintSetupOnly
を FALSE
に設定してコンストラクターを呼び出すと、PD_RETURNDC
フラグが自動的に使用されることに注意してください。 DoModal
、GetDefaults
、または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
DEVMODE
およびDEVNAMES
構造体からプリンター デバイス コンテキスト (DC) を作成します。
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 または Cancel ボタンを選択したかどうかを示す定数です。
解説
m_pd
構造体のメンバーを設定して、さまざまな印刷ダイアログ オプションを初期化する場合は、DoModal
を呼び出す前に、ダイアログ オブジェクトを構築した後に行う必要があります。
DoModal
を呼び出した後、他のメンバー関数を呼び出して、ユーザーがダイアログ ボックスに入力した設定または情報を取得できます。
bPrintSetupOnly
を FALSE
に設定してコンストラクターを呼び出すと、PD_RETURNDC
フラグが自動的に使用されることに注意してください。 DoModal
、GetDefaults
、または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
が FALSE
に設定されたCPrintDialog
に対して constructor が呼び出されます。 このような場合、プリンター DC と hDevNames
と hDevMode
( m_pd
データ メンバーにある 2 つのハンドル) が自動的に割り当てられます。
CPrintDialog
のコンストラクターが bPrintSetupOnly
FALSE
に設定された状態で呼び出された場合、この関数は呼び出し元にhDevNames
とhDevMode
m_pd.hDevNames
およびm_pd.hDevMode
) を返すだけでなく、m_pd.hDC
でプリンター DC も返します。 呼び出し元は、プリンター DC を削除し、CPrintDialog
オブジェクトの操作が完了したら、ハンドルで Windows GlobalFree
関数を呼び出す必要があります。
例
このコード フラグメントは、既定のプリンターのデバイス コンテキストを取得し、プリンターの解像度を 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
を呼び出して既定のプリンターの現在のデバイスの既定値を取得した後に、この関数を呼び出します。 CDC::CreateDC
の呼び出しでlpszDeviceName
の値として、GetDeviceName
によって返されるCString
オブジェクトへのポインターを使用します。
例
このコード フラグメントは、ユーザーの既定のプリンター名と接続されているポートと、プリンターが使用するスプーラー名を示しています。 このコードには、"既定のプリンターは 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
関数を使用して、この構造体によって取得されたメモリのロックを解除する必要があります。
解説
DoModal
またはGetDefaults
を呼び出して印刷デバイスに関する情報を取得した後、この関数を呼び出します。
例
CPrintDialog::PrintCollate
の例を参照してください。
CPrintDialog::GetDriverName
現在選択されているプリンター ドライバーの名前を取得します。
CString GetDriverName() const;
戻り値
システム定義ドライバー名を指定する CString
。
解説
システム定義プリンター デバイス ドライバーの名前を取得する DoModal
または GetDefaults
を呼び出した後、この関数を呼び出します。 CDC::CreateDC
の呼び出しでlpszDriverName
の値として、GetDriverName
によって返されるCString
オブジェクトへのポインターを使用します。
例
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
。
解説
CPrintDialog
コンストラクターのbPrintSetupOnly
パラメーターが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
オブジェクトを作成した後、m_pd
を使用して、DoModal
メンバー関数を呼び出す前に、ダイアログ ボックスのさまざまな側面を設定できます。 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
の例を参照してください。