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_pdPRINTDLGです。 この構造の詳細については、Windows SDK を参照してください。

独自のm_pdhDevModeハンドルをメンバーにhDevNames指定しない場合は、ダイアログ ボックスが完了したら、これらのハンドルに対して Windows 関数GlobalFreeを呼び出してください。 提供されるフレームワークの印刷セットアップの実装 CWinApp::OnFilePrintSetupを使用する場合、これらのハンドルを解放する必要はありません。 ハンドルはメインによって保持されCWinApp、's デストラクター' でCWinApp解放されます。 スタンドアロンを使用 CPrintDialog する場合は、これらのハンドルを解放するだけで済みます。

ダイアログ ボックス コントロールを初期化した後、メンバー関数を DoModal 呼び出してダイアログ ボックスを表示し、ユーザーが印刷オプションを選択できるようにします。 DoModalは、ユーザーが [OK] () または [キャンセル] (IDCANCELIDOK) ボタンを選択したかどうかを返します。

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

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

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

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

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

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

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

継承階層

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 印刷設定] ダイアログ ボックスが表示されます。 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) をDEVMODEDEVNAMES作成します。

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 関数を呼び出して、エラーが発生したかどうかを判断します。

IDOKIDCANCEL、ユーザーが [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 配置されます。

場合によっては、この関数の呼び出しでコンストラクターが呼び出され、bPrintSetupOnlywith set to FALSE.CPrintDialog このような場合、プリンター DC と hDevNameshDevMode (データ メンバーに m_pd 配置されている 2 つのハンドル) が自動的に割り当てられます。

コンストラクターCPrintDialogが次の値にFALSE設定された状態でbPrintSetupOnly呼び出された場合、この関数は呼び出し元に戻りhDevNames、呼び出しhDevModem_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 して、既定のプリンターの現在のデバイスの既定値を取得します。 への呼び出しのCStringlpszDeviceNameとして返される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します。 への呼び出しのCStringlpszDriverNameとして返される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は .

解説

コンストラクターのbPrintSetupOnlyCPrintDialogパラメーターが 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 の例を参照してください。

関連項目

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