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) ボタンを選択したかどうかを返します。

DoModalIDOKを返す場合は、CPrintDialogのいずれかのメンバー関数を使用して、ユーザーが入力した情報を取得できます。

CPrintDialog::GetDefaults メンバー関数は、ダイアログ ボックスを表示せずに、現在のプリンターの既定値を取得する場合に便利です。 このメンバー関数では、ユーザーの操作は必要ありません。

Windows CommDlgExtendedError 関数を使用すると、ダイアログ ボックスの初期化中にエラーが発生したかどうかを判断し、エラーの詳細を確認できます。 この関数の詳細については、Windows SDK を参照してください。

CPrintDialog は、Windows バージョン 3.1 以降に付属する COMMDLG.DLL ファイルに依存しています。

ダイアログ ボックスをカスタマイズするには、 CPrintDialogからクラスを派生させ、カスタム ダイアログ テンプレートを指定し、メッセージ マップを追加して拡張コントロールからの通知メッセージを処理します。 未処理のメッセージは、基底クラスに渡す必要があります。 フック関数をカスタマイズする必要はありません。

ダイアログ ボックスが [印刷] または [印刷の設定] のどちらであるかによって同じメッセージを異なる方法で処理するには、ダイアログ ボックスごとにクラスを派生させる必要があります。 また、Windows AttachOnSetup 関数をオーバーライドする必要があります。この関数は、[印刷] ダイアログ ボックスで [印刷設定] ボタンが選択されている場合に新しいダイアログ ボックスの作成を処理します。

CPrintDialogの使用方法の詳細については、「Common ダイアログ クラスを参照してください。

継承階層

CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

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 に設定します。 bPrintSetupOnlyFALSEされている場合は、[印刷] ダイアログ ボックスに [印刷設定] オプション ボタンが表示されます。

dwFlags
ビットごとの OR 演算子を使用して、ダイアログ ボックスの設定をカスタマイズするために使用できる 1 つ以上のフラグ。 たとえば、 PD_ALLPAGES フラグは、文書のすべてのページに既定の印刷範囲を設定します。 これらのフラグの詳細については、Windows SDK の PRINTDLG 構造を参照してください。

pParentWnd
ダイアログ ボックスの親ウィンドウまたは所有者ウィンドウへのポインター。

解説

このメンバー関数は、オブジェクトのみを構築します。 DoModal メンバー関数を使用して、ダイアログ ボックスを表示します。

bPrintSetupOnlyFALSE に設定してコンストラクターを呼び出すと、PD_RETURNDC フラグが自動的に使用されることに注意してください。 DoModalGetDefaults、または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 または IDCANCELIDCANCELが返された場合は、Windows CommDlgExtendedError 関数を呼び出して、エラーが発生したかどうかを確認します。

IDOK および IDCANCEL は、ユーザーが OK または Cancel ボタンを選択したかどうかを示す定数です。

解説

m_pd構造体のメンバーを設定して、さまざまな印刷ダイアログ オプションを初期化する場合は、DoModalを呼び出す前に、ダイアログ オブジェクトを構築した後に行う必要があります。

DoModalを呼び出した後、他のメンバー関数を呼び出して、ユーザーがダイアログ ボックスに入力した設定または情報を取得できます。

bPrintSetupOnlyFALSE に設定してコンストラクターを呼び出すと、PD_RETURNDC フラグが自動的に使用されることに注意してください。 DoModalGetDefaults、または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 構造体に配置されます。

場合によっては、この関数を呼び出すと、bPrintSetupOnlyFALSE に設定されたCPrintDialogに対して constructor が呼び出されます。 このような場合、プリンター DC と hDevNameshDevMode ( m_pd データ メンバーにある 2 つのハンドル) が自動的に割り当てられます。

CPrintDialogのコンストラクターが bPrintSetupOnly FALSE に設定された状態で呼び出された場合、この関数は呼び出し元にhDevNameshDevModem_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 の例を参照してください。

関連項目

MFC サンプル DIBLOOK
CCommonDialog クラス
階層図
CPrintInfo 構造体