다음을 통해 공유


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 표준과 일치하는 방식으로 인쇄 및 인쇄 설정 대화 상자를 쉽게 구현할 수 있는 방법을 제공합니다.

참고 항목

이 클래스는 CPrintDialogEx Windows Print 속성 시트에서 제공하는 서비스를 캡슐화합니다. 자세한 내용은 개요를 참조하세요 CPrintDialogEx .

CPrintDialog'의 기능은 인쇄 설정과 페이지 설정 모두에 CPageSetupDialog대한 공통 대화 상자를 제공하도록 설계된 기능으로 대체됩니다.

프레임워크를 사용하여 애플리케이션에 대한 인쇄 프로세스의 여러 측면을 처리할 수 있습니다. 이 경우 프레임워크는 인쇄를 위한 Windows 일반 대화 상자를 자동으로 표시합니다. 또한 애플리케이션에 대한 프레임워크 핸들 인쇄를 사용할 수 있지만 사용자 고유의 인쇄 대화 상자를 사용하여 일반적인 인쇄 대화 상자를 재정의할 수도 있습니다. 프레임워크를 사용하여 인쇄 작업을 처리하는 방법에 대한 자세한 내용은 인쇄 문서를 참조하세요.

애플리케이션이 프레임워크의 개입 없이 인쇄를 처리하도록 하려면 제공된 생성자와 함께 "있는 그대로" 클래스를 사용 CPrintDialog 하거나 사용자 고유의 대화 클래스를 CPrintDialog 파생시키고 필요에 맞게 생성자를 작성할 수 있습니다. 두 경우 모두 이러한 대화 상자는 클래스 CCommonDialog에서 파생되므로 표준 MFC 대화 상자처럼 동작합니다.

개체를 CPrintDialog 사용하려면 먼저 생성자를 사용하여 개체를 CPrintDialog 만듭니다. 대화 상자가 생성되면 구조체의 모든 값을 m_pd 설정하거나 수정하여 대화 상자 컨트롤의 값을 초기화할 수 있습니다. 구조체 m_pd 는 형식 PRINTDLG입니다. 이 구조에 대한 자세한 내용은 Windows SDK를 참조하세요.

사용자 고유의 핸들과 hDevNames 멤버에 대한 hDevMode 핸들을 m_pd 제공하지 않는 경우 대화 상자가 완료되면 이러한 핸들에 대해 Windows 함수 GlobalFree 를 호출해야 합니다. 프레임워크에서 제공하는 인쇄 설정 구현을 CWinApp::OnFilePrintSetup사용하는 경우 이러한 핸들을 해제할 필요가 없습니다. 핸들은 유지 관리되며 CWinApp '의 소멸자에서 CWinApp해제됩니다. 독립 실행형을 사용하는 CPrintDialog 경우에만 이러한 핸들을 해제해야 합니다.

대화 상자 컨트롤을 초기화한 후 멤버 함수를 DoModal 호출하여 대화 상자를 표시하고 사용자가 인쇄 옵션을 선택할 수 있도록 합니다. DoModal는 사용자가 확인() 또는 취소IDCANCEL(IDOK) 단추를 선택했는지 여부를 반환합니다.

반환IDOK되는 경우 DoModal 사용자의 멤버 함수 중 CPrintDialog하나를 사용하여 사용자의 정보 입력을 검색할 수 있습니다.

CPrintDialog::GetDefaults 멤버 함수는 대화 상자를 표시하지 않고 현재 프린터 기본값을 검색하는 데 유용합니다. 이 멤버 함수는 사용자 상호 작용이 필요하지 않습니다.

Windows CommDlgExtendedError 함수를 사용하여 대화 상자를 초기화하는 동안 오류가 발생했는지 여부를 확인하고 오류에 대해 자세히 알아볼 수 있습니다. 이 함수에 대한 자세한 내용은 Windows SDK를 참조하세요.

CPrintDialog 는 Windows 버전 3.1 이상과 함께 제공되는 파일을 사용합니다 COMMDLG.DLL .

대화 상자를 사용자 지정하려면 클래스 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 인쇄 대화 상자 또는 인쇄 설정 대화 상자가 표시되는지 여부를 지정합니다. 표준 Windows 인쇄 설정 대화 상자를 표시하려면 TRUE 이 매개 변수를 설정합니다. Windows 인쇄 대화 상자를 표시하도록 FALSE 설정합니다. 있는 FALSE경우 bPrintSetupOnly 인쇄 설정 옵션 단추가 인쇄 대화 상자에 계속 표시됩니다.

dwFlags
비트 OR 연산자를 사용하여 결합된 대화 상자의 설정을 사용자 지정하는 데 사용할 수 있는 플래그가 하나 이상 있습니다. 예를 들어 플래그는 PD_ALLPAGES 기본 인쇄 범위를 문서의 모든 페이지로 설정합니다. PRINTDLG 이러한 플래그에 대한 자세한 내용은 Windows SDK의 구조를 참조하세요.

pParentWnd
대화 상자의 부모 또는 소유자 창에 대한 포인터입니다.

설명

이 멤버 함수는 개체만 생성합니다. 멤버 함수를 DoModal 사용하여 대화 상자를 표시합니다.

설정된 FALSE생성자를 bPrintSetupOnly 호출하면 플래그가 PD_RETURNDC 자동으로 사용됩니다. 를 호출DoModalGetDefaultsGetPrinterDC후 프린터 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

DEVNAMES 구조체에서 프린터 디바이스 컨텍스트(DC)를 DEVMODE 만듭니다.

HDC CreatePrinterDC();

Return Value

새로 만든 프린터 디바이스 컨텍스트에 대한 핸들입니다.

설명

이 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();

Return Value

IDOK 또는 IDCANCEL. 반환되는 경우 IDCANCEL Windows CommDlgExtendedError 함수를 호출하여 오류가 발생했는지 여부를 확인합니다.

IDOK사용자가 IDCANCEL 확인 또는 취소 단추를 선택했는지 여부를 나타내는 상수입니다.

설명

구조체의 m_pd 멤버를 설정하여 다양한 인쇄 대화 상자를 초기화하려면 호출 DoModal하기 전에 대화 상자 개체를 생성한 후에 이 작업을 수행해야 합니다.

호출 DoModal한 후 다른 멤버 함수를 호출하여 사용자가 대화 상자에 입력한 설정 또는 정보를 검색할 수 있습니다.

설정된 FALSE생성자를 bPrintSetupOnly 호출하면 플래그가 PD_RETURNDC 자동으로 사용됩니다. 를 호출DoModalGetDefaultsGetPrinterDC후 프린터 DC가 반환m_pd.hDC됩니다. 이 DC는 호출자가 CPrintDialog호출하여 DeleteDC 해제해야 합니다.

예시

CPrintDialog::CreatePrinterDC에 대한 예를 참조하세요.

CPrintDialog::GetCopies

요청된 복사본 수를 검색합니다.

int GetCopies() const;

Return Value

요청된 복사본 수입니다.

설명

호출한 후 이 함수를 호출 DoModal 하여 요청된 복사본 수를 검색합니다.

예시

CPrintDialog::PrintCollate에 대한 예를 참조하세요.

CPrintDialog::GetDefaults

대화 상자를 표시하지 않고 기본 프린터의 디바이스 기본값을 검색합니다.

BOOL GetDefaults();

Return Value

함수가 성공한 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

검색된 값은 구조체에 m_pd 배치됩니다.

경우에 따라 이 함수에 대한 호출은 set to로 설정된 생성자를 bPrintSetupOnly CPrintDialog 호출합니다.FALSE 이러한 경우 프린터 DC 및 hDevNames hDevMode (데이터 멤버에 있는 m_pd 두 개의 핸들) 자동으로 할당 됩니다.

set를 사용하여 생성자를 CPrintDialog 호출 bPrintSetupOnly FALSE한 경우 이 함수는 호출자에게 반환 hDevNameshDevMode m_pd.hDevNames 위치 및 m_pd.hDevMode)뿐만 아니라 프린터 DC m_pd.hDC도 반환합니다. 개체를 완료하면 호출자가 프린터 DC를 삭제하고 핸들에서 Windows GlobalFree 함수를 CPrintDialog 호출해야 합니다.

예시

이 코드 조각은 기본 프린터의 디바이스 컨텍스트를 가져오고 인치당 점으로 프린터의 해상도를 사용자에게 보고합니다. (프린터 기능의 이 특성을 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;

Return Value

현재 선택한 프린터의 이름입니다.

설명

호출한 후 DoModal 현재 선택한 프린터의 이름을 검색하거나 호출한 후 이 함수를 호출 GetDefaults 하여 기본 프린터의 현재 디바이스 기본값을 검색합니다. 호출CDC::CreateDC에서 반환된 GetDeviceName 개체에 CString 대한 포인터를 값 lpszDeviceName 으로 사용합니다.

예시

이 코드 조각은 사용자의 기본 프린터 이름 및 연결된 포트와 프린터에서 사용하는 스풀러 이름을 보여줍니다. 예를 들어 코드에는 "기본 프린터는 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;

Return Value

DEVMODE 인쇄 드라이버의 디바이스 초기화 및 환경에 대한 정보를 포함하는 데이터 구조입니다. Windows SDK에 설명된 Windows GlobalUnlock 함수를 사용하여 이 구조에서 가져온 메모리의 잠금을 해제해야 합니다.

설명

호출 후 이 함수를 호출 DoModal 하거나 GetDefaults 인쇄 장치에 대한 정보를 검색합니다.

예시

CPrintDialog::PrintCollate에 대한 예를 참조하세요.

CPrintDialog::GetDriverName

현재 선택한 프린터 드라이버의 이름을 검색합니다.

CString GetDriverName() const;

Return Value

CString 시스템 정의 드라이버 이름을 지정하는 형식입니다.

설명

호출 후 이 함수를 호출 DoModal 하거나 GetDefaults 시스템 정의 프린터 디바이스 드라이버의 이름을 검색합니다. 호출CDC::CreateDC에서 반환된 GetDriverName 개체에 CString 대한 포인터를 값 lpszDriverName 으로 사용합니다.

예시

CPrintDialog::GetDeviceName에 대한 예를 참조하세요.

CPrintDialog::GetFromPage

인쇄 범위의 시작 페이지를 검색합니다.

int GetFromPage() const;

Return Value

인쇄할 페이지 범위의 시작 페이지 번호입니다.

설명

호출한 후 이 함수를 호출 DoModal 하여 인쇄할 페이지 범위의 시작 페이지 번호를 검색합니다.

예시

CPrintDialog::m_pd에 대한 예를 참조하세요.

CPrintDialog::GetPortName

현재 선택한 프린터 포트의 이름을 검색합니다.

CString GetPortName() const;

Return Value

현재 선택한 프린터 포트의 이름입니다.

설명

호출 후 이 함수를 호출 DoModal 하거나 GetDefaults 현재 선택한 프린터 포트의 이름을 검색합니다.

예시

CPrintDialog::GetDeviceName에 대한 예제를 참조하세요.

CPrintDialog::GetPrinterDC

프린터 디바이스 컨텍스트에 대한 핸들을 검색합니다.

HDC GetPrinterDC() const;

Return Value

성공하면 프린터 디바이스 컨텍스트에 대한 핸들입니다. 그렇지 않으면 NULL.

설명

bPrintSetupOnly 생성자의 매개 변수 CPrintDialogFALSE 인쇄 대화 상자가 표시됨 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;

Return Value

인쇄할 페이지 범위의 끝 페이지 번호입니다.

설명

호출한 후 이 함수를 호출 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;

Return Value

문서의 모든 페이지를 인쇄할 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

호출 후 이 함수를 호출 DoModal 하여 문서의 모든 페이지를 인쇄할지 여부를 결정합니다.

예시

CPrintDialog::m_pd에 대한 예를 참조하세요.

CPrintDialog::PrintCollate

데이터 정렬된 복사본이 요청되는지 여부를 결정합니다.

BOOL PrintCollate() const;

Return Value

사용자가 대화 상자에서 데이터 정렬 확인란을 선택하는 경우 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;

Return Value

문서의 페이지 범위만 인쇄할 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

호출 후 이 함수를 호출 DoModal 하여 문서의 페이지 범위만 인쇄할지 여부를 결정합니다.

예시

CPrintDialog::m_pd에 대한 예를 참조하세요.

CPrintDialog::PrintSelection

현재 선택한 항목만 인쇄할지 여부를 결정합니다.

BOOL PrintSelection() const;

Return Value

선택한 항목만 인쇄할 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

호출 후 이 함수를 호출 DoModal 하여 현재 선택한 항목만 인쇄할지 여부를 결정합니다.

예시

CPrintDialog::m_pd에 대한 예를 참조하세요.

참고 항목

MFC 샘플 DIBLOOK
CCommonDialog 수업
계층 구조 차트
CPrintInfo 구조