다음을 통해 공유


인쇄 대화 상자

인쇄 대화 상자를 사용하면 사용자가 특정 인쇄 작업에 대한 옵션을 선택할 수 있습니다. 예를 들어 사용자는 사용할 프린터, 인쇄할 페이지 범위 및 복사본 수를 지정할 수 있습니다.

PrintDlgEx 함수를 사용하여 인쇄 대화 상자와 유사한 컨트롤이 포함된 일반 페이지가 있는 인쇄속성 시트를 표시할 수 있습니다. 속성 시트에는 일반 페이지 다음에 추가 애플리케이션별 및 드라이버별 속성 페이지가 있을 수도 있습니다.

PRINTDLG 구조를 초기화하고 구조를 PrintDlg 함수에 전달하여 인쇄 대화 상자를 만들고 표시합니다.

다음 그림에서는 일반적인 인쇄 대화 상자를 보여 줍니다.

인쇄 대화 상자

사용자가 확인 단추를 클릭하면 PrintDlgTRUE 를 반환하고 PRINTDLG 구조를 사용하여 사용자의 선택 항목에 대한 정보를 반환합니다. 예를 들어 hDevModehDevNames 멤버는 일반적으로 및 DEVNAMES 구조체에 대한 전역 메모리 핸들을 반환합니다. 이러한 구조의 정보를 사용하여 선택한 프린터에 대한 디바이스 컨텍스트 또는 정보 컨텍스트를 만들 수 있습니다.

사용자가 인쇄 대화 상자를 취소하거나 오류가 발생하면 PrintDlgFALSE를 반환합니다. CommDlgExtendedError 함수를 사용하여 확장된 오류 값을 검색하여 오류의 원인을 확인할 수 있습니다.

인쇄 대화 상자에는 사용자가 모든 페이지, 페이지 범위 또는 선택한 텍스트만 인쇄할지 여부를 나타내는 인쇄 범위 라디오 단추 그룹이 포함되어 있습니다. PrintDlg를 호출하기 전에 PD_ALLPAGES, PD_SELECTION 또는 PD_PAGENUMS 플래그 중 하나를 설정하여 처음에 선택된 단추를 나타낼 수 있습니다. PrintDlgTRUE를 반환하면 함수는 이러한 플래그 중 하나를 설정하여 사용자의 선택을 나타냅니다. PD_PAGENUMS 설정된 경우 PRINTDLG 구조체의 nFromPagenToPage 멤버에는 사용자가 지정한 시작 및 끝 페이지가 포함됩니다. Pages 라디오 단추와 연결된 FromTo 편집 컨트롤을 사용하지 않도록 설정하려면 PD_NOPAGENUMS 플래그를 설정합니다. 선택 라디오 단추를 사용하지 않도록 설정하려면 PD_NOSELECTION 플래그를 설정합니다.

대화 상자에는 사용자가 인쇄할 복사본 수를 입력할 수 있는 편집 컨트롤이 포함되어 있습니다. PRINTDLG 구조체의 hDevMode 멤버가 NULL이 아닌 경우 구조체의 dmCopies 멤버는 이 편집 컨트롤의 초기 값을 지정합니다. hDevModeNULL인 경우 PRINTDLG 구조체의 nCopies 멤버는 초기 값을 지정합니다. PrintDlg가 반환될 때 nCopies는 일반적으로 사용자가 지정한 복사본 수를 나타냅니다. 그러나 대화 상자를 만들 때 PD_USEDEVMODECOPIESANDCOLLATE 플래그를 설정하면 nCopies는 항상 반환 시 1로 설정되고 DEVMODEdmCopies 멤버는 인쇄할 복사본 수를 나타냅니다.

데이터 정렬 검사 상자는 여러 복사본이 인쇄되는 경우 사용자가 페이지를 정렬할지 여부를 나타냅니다. Collate검사 상자를 선택하면 PD_COLLATE 플래그가 설정됩니다. 애플리케이션에서 여러 복사본 또는 시뮬레이션된 데이터 정렬을 지원하지 않는 경우 PRINTDLG 구조의 Flags 멤버에서 PD_USEDEVMODECOPIESANDCOLLATE 플래그를 설정합니다. 이렇게 하면 프린터 드라이버가 여러 복사본 및 데이터 정렬을 지원하지 않는 한 데이터 정렬 검사 상자와 복사본 수 편집 컨트롤이 비활성화됩니다.

파일로 인쇄 검사 상자는 사용자가 프린터가 아닌 파일로 출력을 보낼지 여부를 나타냅니다. 검사 상자가 처음 선택되도록 PD_PRINTTOFILE 플래그를 설정할 수 있습니다. 검사 상자를 숨기려면 PD_HIDEPRINTTOFILE 플래그를 설정합니다. 사용하지 않도록 설정하려면 PD_DISABLEPRINTTOFILE 플래그를 설정합니다. 사용자가 파일에 인쇄 옵션을 선택하면 PrintDlgPD_PRINTTOFILE 플래그를 설정하고 DEVNAMES 구조체의 wOutputOffset 멤버가 나타내는 오프셋에 "FILE:"을 반환합니다. 함수를 호출하여 인쇄 작업을 시작할 때 구조체의 lpszOutput 멤버에 이 "FILE:" 문자열을 지정합니다. 이 문자열을 지정하면 인쇄 하위 시스템이 출력 파일의 이름을 사용자에게 쿼리합니다.

기본적으로 인쇄 대화 상자에는 처음에 현재 기본 프린터에 대한 정보가 표시됩니다. 설치된 다른 프린터에 대한 정보를 표시하려면 및 DEVNAMES 구조를 초기화하고 hDevModehDevNames 멤버에 전역 메모리 핸들을 구조체에 할당합니다. DEVMODE 구조체의 dmDeviceName 멤버 및 DEVNAMES 구조체의 wDriverOffset 멤버에 지정한 디바이스 이름은 Win.ini 파일의 [디바이스] 섹션에도 나열된 프린터 디바이스를 식별해야 합니다. 디바이스가 나열되지 않으면 PrintDlg 에서 오류가 반환됩니다.

PRINTDLG 구조체의 Flags 멤버에서 PD_RETURNDC 또는 PD_RETURNIC 플래그를 설정하여 PrintDlg에서 프린터의 디바이스 컨텍스트 또는 정보 컨텍스트를 만들도록 지시할 수 있습니다. 함수는 hDC 멤버의 디바이스 컨텍스트 또는 정보 컨텍스트에 대한 핸들을 반환합니다. PD_RETURNDC 플래그를 사용하는 경우 디바이스 컨텍스트를 사용하여 프린터에 대한 출력을 생성할 수 있습니다.

인쇄 대화 상자를 표시하지 않고 기본 프린터에 대한 정보를 검색하려면 PD_RETURNDEFAULT 플래그를 설정합니다. 이 경우 PrintDlghDevModehDevNames 멤버를 정보가 포함된 구조체에 대한 핸들로 설정한 직후 반환합니다.

기본적으로 PrintDlg 는 오류가 발생할 때 메시지 상자를 표시합니다. 예를 들어 프린터가 설치되지 않은 경우 함수는 오류 메시지를 표시합니다. 함수가 이러한 경고 메시지를 표시하지 않도록 하려면 PD_NOWARNING 플래그를 설정합니다.

이 섹션에서 설명하는 항목은 다음과 같습니다.

인쇄 대화 상자 사용자 지정

예를 들어 애플리케이션에 고유한 추가 컨트롤을 포함하려는 경우 인쇄 대화 상자에 대한 사용자 지정 템플릿을 제공할 수 있습니다. PrintDlg 함수는 기본 템플릿 대신 사용자 지정 템플릿을 사용합니다.

인쇄 대화 상자에 대한 사용자 지정 템플릿을 제공하려면 다음을 수행합니다.

  1. Prnsetup.dlg 파일에 지정된 기본 템플릿을 수정하여 사용자 지정 템플릿을 만듭니다. 기본 인쇄 대화 상자 템플릿에 사용되는 컨트롤 식별자는 Dlgs.h 파일에 정의되어 있습니다.
  2. PRINTDLG 구조를 사용하여 다음과 같이 템플릿을 사용하도록 설정합니다.
    • 사용자 지정 템플릿이 애플리케이션 또는 동적 링크 라이브러리의 리소스인 경우 Flags 멤버에서 PD_ENABLEPRINTTEMPLATE 플래그를 설정합니다. 구조체의 hInstancelpPrintTemplateName 멤버를 사용하여 모듈 및 리소스 이름을 식별합니다.

      -또는-

    • 사용자 지정 템플릿이 이미 메모리에 있는 경우 PD_ENABLEPRINTTEMPLATEHANDLE 플래그를 설정합니다. hPrintTemplate 멤버를 사용하여 템플릿이 포함된 메모리 개체를 식별합니다.

인쇄 대화 상자에 PrintHookProc 후크 프로시저를 제공할 수 있습니다. 후크 프로시저는 대화 상자로 전송된 메시지를 처리할 수 있습니다. 대화 상자로 메시지를 보낼 수도 있습니다. 사용자 지정 템플릿을 사용하여 추가 컨트롤을 정의하는 경우 컨트롤에 대한 입력을 처리하는 후크 프로시저를 제공해야 합니다.

인쇄 대화 상자에 후크 프로시저를 사용하도록 설정하려면 다음을 수행합니다.

  1. PRINTDLG 구조체의 Flags 멤버에서 PD_ENABLEPRINTHOOK 플래그를 설정합니다.
  2. lpfnPrintHook 멤버에서 후크 프로시저의 주소를 지정합니다.

WM_INITDIALOG 메시지를 처리한 후 대화 상자 프로시저는 후크 프로시저에 WM_INITDIALOG 메시지를 보냅니다. 이 메시지의 lParam 매개 변수는 대화 상자를 초기화하는 데 사용되는 PRINTDLG 구조체에 대한 포인터입니다.

PrintDlg 함수 호출에서 PD_PRINTSETUP 플래그를 설정하여 인쇄 설정 대화 상자를 만들고 표시할 수 있습니다. 그러나 인쇄 설정 대화 상자는 페이지 설정 대화 상자로 대체되었으며 새 애플리케이션에서 사용하면 안 됩니다.

다음 플래그는 인쇄 설정 대화 상자에만 적용됩니다.

  • PD_ENABLESETUPHOOK
  • PD_ENABLESETUPTEMPLATE
  • PD_ENABLESETUPTEMPLATEHANDLE