PRINTDLGEXA 구조체(commdlg.h)

PrintDlgEx 함수가 Print 속성 시트를 초기화하는 데 사용하는 정보를 포함합니다. 사용자가 속성 시트를 닫은 후 시스템은 이 구조를 사용하여 사용자의 선택 항목에 대한 정보를 반환합니다.

구문

typedef struct tagPDEXA {
  DWORD            lStructSize;
  HWND             hwndOwner;
  HGLOBAL          hDevMode;
  HGLOBAL          hDevNames;
  HDC              hDC;
  DWORD            Flags;
  DWORD            Flags2;
  DWORD            ExclusionFlags;
  DWORD            nPageRanges;
  DWORD            nMaxPageRanges;
  LPPRINTPAGERANGE lpPageRanges;
  DWORD            nMinPage;
  DWORD            nMaxPage;
  DWORD            nCopies;
  HINSTANCE        hInstance;
  LPCSTR           lpPrintTemplateName;
  LPUNKNOWN        lpCallback;
  DWORD            nPropertyPages;
  HPROPSHEETPAGE   *lphPropertyPages;
  DWORD            nStartPage;
  DWORD            dwResultAction;
} PRINTDLGEXA, *LPPRINTDLGEXA;

멤버

lStructSize

형식:DWORD

구조체 크기(바이트)입니다.

hwndOwner

형식: HWND

속성 시트를 소유하는 창에 대한 핸들입니다. 이 멤버는 유효한 창 핸들이어야 합니다. NULL일 수 없습니다.

hDevMode

형식: HGLOBAL

DEVMODE 구조를 포함하는 이동 가능한 전역 메모리 개체에 대한 핸들입니다. 입력 시 hDevModeNULL이 아닌 경우 DEVMODE 구조체에 대해 이동 가능한 메모리 블록을 할당하고 해당 멤버를 초기화해야 합니다. PrintDlgEx 함수는 입력 데이터를 사용하여 속성 시트의 컨트롤을 초기화합니다. PrintDlgEx가 반환되면 DEVMODE 멤버는 사용자의 입력을 나타냅니다.

입력 시 hDevModeNULL이면 PrintDlgExDEVMODE 구조체에 대한 메모리를 할당하고, 사용자의 입력을 나타내도록 멤버를 초기화하고, 이를 식별하는 핸들을 반환합니다.

hDevModehDevNames 멤버에 대한 자세한 내용은 이 항목의 끝에 있는 설명 섹션을 참조하세요.

hDevNames

형식: HGLOBAL

DEVNAMES 구조를 포함하는 이동 가능한 전역 메모리 개체에 대한 핸들입니다. 입력 시 hDevNamesNULL이 아닌 경우 DEVNAMES 구조체에 대해 이동 가능한 메모리 블록을 할당하고 해당 멤버를 초기화해야 합니다. PrintDlgEx 함수는 입력 데이터를 사용하여 속성 시트의 컨트롤을 초기화합니다. PrintDlgEx가 반환되면 DEVNAMES 멤버는 사용자가 선택한 프린터에 대한 정보를 포함합니다. 이 정보를 사용하여 디바이스 컨텍스트 또는 정보 컨텍스트를 만들 수 있습니다.

hDevNames 멤버는 NULL일 수 있으며, 이 경우 PrintDlgExDEVNAMES 구조에 대한 메모리를 할당하고, 사용자의 입력을 나타내도록 멤버를 초기화하고, 이를 식별하는 핸들을 반환합니다.

hDevModehDevNames 멤버에 대한 자세한 내용은 이 항목의 끝에 있는 설명 섹션을 참조하세요.

hDC

형식: HDC

Flags 멤버가 PD_RETURNDC 또는 PC_RETURNIC플래그를 지정하는지 여부에 따라 디바이스 컨텍스트 또는 정보 컨텍스트에 대한 핸들입니다. 두 플래그를 모두 지정하지 않으면 이 멤버의 값이 정의되지 않습니다. 두 플래그가 모두 지정된 경우 PD_RETURNDC 우선 순위가 있습니다. hDCNULL이 아닌 경우 DeleteDC를 호출하여 GDI 개체를 더 이상 필요하지 않은 후에 해제해야 합니다. 그렇지 않으면 PrintDlgw API를 호출할 때마다 GDI 개체가 누출됩니다.

Flags

형식:DWORD

Print 속성 시트를 초기화하는 데 사용할 수 있는 비트 플래그 집합입니다. PrintDlgEx 함수가 반환되면 이러한 플래그를 설정하여 사용자의 입력을 나타냅니다. 이 멤버는 다음 값 중 하나 이상일 수 있습니다.

PrintDlg 또는 PrintDlgExDEVMODE 구조체의 dmCopiesdmCollate 멤버에서 올바른 값을 반환하도록 하려면TRUEPD_RETURNDC = 설정하고TRUE를 PD_USEDEVMODECOPIESANDCOLLATE = . 이렇게 하면 PRINTDLG 구조체의 nCopies 멤버는 항상 1이고 PD_COLLATE 항상 FALSE입니다.

PrintDlg 또는 PrintDlgExnCopiesPD_COLLATE 올바른 값을 반환하도록 하려면TRUEPD_RETURNDC 설정하고 = FALSE를 PD_USEDEVMODECOPIESANDCOLLATE = . 이렇게 하면 dmCopies 는 항상 1이고 dmCollate 는 항상 FALSE입니다.

Windows Vista부터 PD_RETURNDC TRUE로 설정되고PD_USEDEVMODECOPIESANDCOLLATEFALSE로 설정된 PrintDlg 또는 PrintDlgEx를 호출하면 PrintDlg 또는 PrintDlgEx 함수는 PRINTDLG 구조체의 nCopies 멤버에 있는 복사본 수를 설정하고 PRINTDLG 구조체의 hDC 멤버가 나타내는 구조의 복사본 수를 설정합니다.

GDI를 호출할 때 nCopies 값을 무시하고 값을 1로 간주하고 반환된 hDC 를 사용하여 중복 복사본 인쇄를 방지해야 합니다.

의미
PD_ALLPAGES
0x00000000
모든 라디오 단추가 처음에 선택되었음을 나타내는 기본 플래그입니다. 이 플래그는 PD_PAGENUMS, PD_SELECTIONPD_CURRENTPAGE 플래그가 지정되지 않았음을 나타내는 자리 표시자로 사용됩니다.
PD_COLLATE
0x00000010
이 플래그가 설정되면 Collate 검사 상자가 선택됩니다.

PrintDlgEx 함수가 반환할 때 이 플래그가 설정된 경우 애플리케이션은 여러 복사본의 데이터 정렬을 시뮬레이션해야 합니다. 자세한 내용은 PD_USEDEVMODECOPIESANDCOLLATE 플래그에 대한 설명을 참조하세요.

PD_NOPAGENUMS 참조하세요.

PD_CURRENTPAGE
0x00400000
이 플래그를 설정하면 현재 페이지 라디오 단추가 선택됩니다. PD_PAGENUMS, PD_SELECTION 또는 PD_CURRENTPAGE 플래그가 설정되지 않은 경우 모든 라디오 단추가 선택됩니다.
PD_DISABLEPRINTTOFILE
0x00080000
파일로 인쇄 검사 상자를 사용하지 않도록 설정합니다.
PD_ENABLEPRINTTEMPLATE
0x00004000
hInstancelpPrintTemplateName 멤버가 일반 페이지의 아래쪽 부분에 있는 기본 대화 상자 템플릿의 대체를 지정함을 나타냅니다. 기본 템플릿에는 인쇄 대화 상자와 유사한 컨트롤이 포함되어 있습니다. 시스템은 지정된 템플릿을 사용하여 일반 페이지의 자식인 창을 만듭니다.
PD_ENABLEPRINTTEMPLATEHANDLE
0x00010000
hInstance 멤버가 미리 로드된 대화 상자 템플릿이 포함된 데이터 블록을 식별함을 나타냅니다. 이 템플릿은 일반 페이지의 아래쪽 부분에 있는 기본 대화 상자 템플릿을 대체합니다. 시스템은 지정된 템플릿을 사용하여 일반 페이지의 자식인 창을 만듭니다. 이 플래그가 지정된 경우 시스템은 lpPrintTemplateName 멤버를 무시합니다.
PD_EXCLUSIONFLAGS
0x01000000
ExclusionFlags 멤버가 프린터 드라이버 속성 페이지에서 제외할 항목을 식별한다는 것을 나타냅니다. 이 플래그를 설정하지 않으면 기본적으로 프린터 드라이버 속성 페이지에서 항목이 제외됩니다. 제외는 일반 페이지, 애플리케이션 지정 페이지 및 프린터 드라이버 페이지 간에 항목의 중복을 방지합니다.
PD_HIDEPRINTTOFILE
0x00100000
파일로 인쇄 검사 상자를 숨깁니다.
PD_NOCURRENTPAGE
0x00800000
현재 페이지 라디오 단추를 사용하지 않도록 설정합니다.
PD_NOPAGENUMS
0x00000008
Pages 라디오 단추 및 연결된 편집 컨트롤을 사용하지 않도록 설정합니다. 또한 Collate 검사 상자가 대화 상자에 표시됩니다.
PD_NOSELECTION
0x00000004
선택 라디오 단추를 사용하지 않도록 설정합니다.
PD_NOWARNING
0x00000080
오류가 발생할 때 경고 메시지가 표시되지 않도록 합니다.
PD_PAGENUMS
0x00000002
이 플래그가 설정되면 페이지 라디오 단추가 선택됩니다. PD_PAGENUMS, PD_SELECTION 또는 PD_CURRENTPAGE 플래그가 설정되지 않은 경우 모든 라디오 단추가 선택됩니다. PrintDlgEx 함수가 반환될 때 이 플래그가 설정되면 lpPageRanges 멤버는 사용자가 지정한 페이지 범위를 나타냅니다.
PD_PRINTTOFILE
0x00000020
이 플래그가 설정되면 파일로 인쇄 검사 상자가 선택됩니다. PrintDlgEx가 반환될 때 이 플래그가 설정되면 DEVNAMES 구조체의 wOutputOffset 멤버로 표시된 오프셋에 "FILE:" 문자열이 포함됩니다. StartDoc 함수를 호출하여 인쇄 작업을 시작할 때 DOCINFO 구조체의 lpszOutput 멤버에서 이 "FILE:" 문자열을 지정합니다. 이 문자열을 지정하면 인쇄 하위 시스템이 출력 파일의 이름을 사용자에게 쿼리합니다.
PD_RETURNDC
0x00000100
PrintDlgEx가 사용자가 속성 시트에서 선택한 항목과 일치하는 디바이스 컨텍스트를 반환하도록 합니다. 디바이스 컨텍스트는 hDC에서 반환됩니다.
PD_RETURNDEFAULT
0x00000400
이 플래그를 설정하면 PrintDlgEx 함수에 속성 시트가 표시되지 않습니다. 대신 hDevNameshDevMode 멤버를 시스템 기본 프린터에 대해 초기화된 DEVNAMESDEVMODE 구조체에 대한 핸들로 설정합니다. hDevNameshDevMode는 모두 NULL이어야 하며 PrintDlgEx는 오류를 반환합니다.
PD_RETURNIC
0x00000200
PD_RETURNDC 플래그와 비슷하지만 이 플래그는 디바이스 컨텍스트가 아닌 정보 컨텍스트를 반환합니다. PD_RETURNDC 또는 PD_RETURNIC 지정되지 않은 경우 hDC는 출력에 정의되지 않습니다.
PD_SELECTION
0x00000001
이 플래그가 설정되면 선택 라디오 단추가 선택됩니다. PD_PAGENUMS, PD_SELECTION 또는 PD_CURRENTPAGE 플래그가 설정되지 않은 경우 모든 라디오 단추가 선택됩니다.
PD_USEDEVMODECOPIES
0x00040000
PD_USEDEVMODECOPIESANDCOLLATE 동일합니다.
PD_USEDEVMODECOPIESANDCOLLATE
0x00040000
이 플래그는 애플리케이션이 여러 복사본 및 데이터 정렬을 지원하는지 여부를 나타냅니다. 입력 시 이 플래그를 설정하여 애플리케이션이 여러 복사본 및 데이터 정렬을 지원하지 않음을 나타냅니다. 이 경우 PRINTDLGEX 구조체의 nCopies 멤버는 항상 1을 반환하고 PD_COLLATEFlags 멤버에 설정되지 않습니다.

이 플래그가 설정되지 않은 경우 애플리케이션은 여러 복사본을 인쇄하고 정렬합니다. 이 경우 PRINTDLGEX 구조체의 nCopies 멤버는 사용자가 인쇄하려는 복사본 수를 나타내고 Flags 멤버의 PD_COLLATE 플래그는 사용자가 데이터 정렬을 원하는지 여부를 나타냅니다.

이 플래그가 설정되었는지 여부에 관계없이 애플리케이션은 nCopies 에서 를 결정하고 렌더링할 복사본 수와 함께 인쇄할지 여부를 PD_COLLATE 수 있습니다.

이 플래그가 설정되고 프린터 드라이버가 여러 복사본을 지원하지 않는 경우 복사본 편집 컨트롤을 사용할 수 없습니다. 마찬가지로 이 플래그가 설정되어 있고 프린터 드라이버가 데이터 정렬을 지원하지 않는 경우 데이터 정렬 검사 상자가 비활성화됩니다.

DEVMODE 구조체의 dmCopiesdmCollate 멤버에는 프린터 드라이버에서 사용하는 복사본 및 데이터 정렬 정보가 포함됩니다. 이 플래그가 설정되고 프린터 드라이버가 여러 복사본을 지원하는 경우 dmCopies 멤버는 사용자가 요청한 복사본 수를 나타냅니다. 이 플래그가 설정되고 프린터 드라이버가 데이터 정렬을 지원하는 경우 DEVMODE 구조체의 dmCollate 멤버는 사용자가 데이터 정렬을 원하는지 여부를 나타냅니다. 이 플래그가 설정되지 않은 경우 dmCopies 멤버는 항상 1을 반환하고 dmCollate 멤버는 항상 0입니다.

Windows Vista 이전의 Windows 버전에서 이 플래그가 호출 애플리케이션에 의해 설정되지 않고 DEVMODE 구조의 dmCopies 멤버가 1보다 큰 경우 복사본 수에 해당 값을 사용합니다. 그렇지 않으면 PRINTDLGEX 구조체의 nCopies 멤버 값을 사용합니다.

PD_USELARGETEMPLATE
0x10000000
속성 시트가 일반 페이지에 대용량 템플릿을 사용하도록 강제 적용합니다. 더 큰 템플릿은 일반 페이지의 아래쪽 부분에 대한 사용자 지정 템플릿을 지정하는 애플리케이션에 더 많은 공간을 제공합니다.

Flags2

형식:DWORD

ExclusionFlags

형식:DWORD

인쇄 속성 시트의 프린터 드라이버 속성 페이지에서 항목을 제외할 수 있는 비트 플래그 집합입니다. 이 값은 PD_EXCLUSIONFLAGS 플래그가 Flags 멤버에 설정된 경우에만 사용됩니다. 제외 플래그는 제외할 항목이 일반 페이지 또는 인쇄 속성 시트의 애플리케이션 정의 페이지에 포함되는 경우에만 사용해야 합니다. 이 멤버는 다음 플래그를 지정할 수 있습니다.

PD_EXCL_COPIESANDCOLLATE

Print 속성 시트의 프린터 드라이버 속성 페이지에서 복사데이터 정렬 컨트롤을 제외합니다. 이 플래그는 애플리케이션이 Print 속성 시트의 일반 페이지 아래쪽 부분에서 제공하는 기본 복사본데이터 정렬 컨트롤을 사용할 때 항상 설정해야 합니다.

nPageRanges

형식:DWORD

입력 시 이 멤버를 lpPageRanges 배열에 지정된 초기 페이지 범위 수로 설정합니다. PrintDlgEx 함수가 반환되면 nPageRangeslpPageRanges 배열에 저장된 사용자 지정 페이지 범위의 수를 나타냅니다. PD_NOPAGENUMS 플래그를 지정하면 이 값이 잘못되었습니다.

nMaxPageRanges

형식:DWORD

lpPageRanges 버퍼의 배열 요소 크기입니다. 이 값은 배열에 저장할 수 있는 페이지 범위의 최대 수를 나타냅니다. PD_NOPAGENUMS 플래그를 지정하면 이 값이 잘못되었습니다. PD_NOPAGENUMS 플래그를 지정하지 않으면 이 값이 0보다 커야 합니다.

lpPageRanges

형식: LPPRINTPAGERANGE

PRINTPAGERANGE 구조체의 배열을 포함하는 버퍼에 대한 포인터입니다. 입력 시 배열에는 Pages 편집 컨트롤에 표시할 초기 페이지 범위가 포함됩니다. PrintDlgEx 함수가 반환되면 배열에 사용자가 지정한 페이지 범위가 포함됩니다. PD_NOPAGENUMS 플래그를 지정하면 이 값이 잘못되었습니다. PD_NOPAGENUMS 플래그를 지정하지 않은 경우 lpPageRangesNULL이 아니어야 합니다.

nMinPage

형식:DWORD

페이지 편집 컨트롤에 지정된 페이지 범위의 최소값입니다. PD_NOPAGENUMS 플래그를 지정하면 이 값이 잘못되었습니다.

nMaxPage

형식:DWORD

페이지 편집 컨트롤에 지정된 페이지 범위의 최대값입니다. PD_NOPAGENUMS 플래그를 지정하면 이 값이 잘못되었습니다.

nCopies

형식:DWORD

hDevModeNULL인 경우 복사본 편집 컨트롤의 초기 복사본 수를 포함합니다. 그렇지 않으면 DEVMODE 구조체의 dmCopies 멤버에 초기 값이 포함됩니다. PrintDlgEx가 반환되면 nCopies에는 애플리케이션이 인쇄해야 하는 실제 복사본 수가 포함됩니다. 이 값은 애플리케이션 또는 프린터 드라이버가 여러 복사본을 인쇄할 책임이 있는지 여부에 따라 달라집니다. PD_USEDEVMODECOPIESANDCOLLATE 플래그가 Flags 멤버에 설정된 경우 nCopies는 항상 반환 시 1이며 프린터 드라이버는 여러 복사본 인쇄를 담당합니다. 플래그가 설정되지 않은 경우 애플리케이션은 nCopies로 지정된 복사본 수를 인쇄합니다. 자세한 내용은 PD_USEDEVMODECOPIESANDCOLLATE 플래그에 대한 설명을 참조하세요.

hInstance

형식: HINSTANCE

PD_ENABLEPRINTTEMPLATE 플래그가 Flags 멤버에 설정된 경우 hInstancelpPrintTemplateName 멤버로 명명된 대화 상자 템플릿이 포함된 애플리케이션 또는 모듈 instance 대한 핸들입니다. PD_ENABLEPRINTTEMPLATEHANDLE 플래그가 Flags 멤버에 설정된 경우 hInstance는 대화 상자 템플릿이 포함된 메모리 개체에 대한 핸들입니다. Flags 멤버에 템플릿 플래그가 설정되지 않은 경우 hInstanceNULL이어야 합니다.

lpPrintTemplateName

형식: LPCTSTR

hInstance 멤버로 식별된 모듈의 대화 상자 템플릿 리소스 이름입니다. 이 템플릿은 일반 페이지의 아래쪽 부분에 있는 기본 대화 상자 템플릿을 대체합니다. 기본 템플릿에는 인쇄 대화 상자와 유사한 컨트롤이 포함되어 있습니다. Flags 멤버에서 PD_ENABLEPRINTTEMPLATE 플래그를 설정하지 않으면 이 멤버는 무시됩니다.

lpCallback

형식: LPUNKNOWN

애플리케이션 정의 콜백 개체에 대한 포인터입니다.

개체에는 일반 페이지의 아래쪽 부분에 있는 자식 대화 상자에 대한 메시지를 수신하려면 IPrintDialogCallback 클래스가 포함되어야 합니다.

콜백 개체에는 IPrintDialogServices 인터페이스에 대한 포인터를 수신하려면 IObjectWithSite 클래스도 포함되어야 합니다. PrintDlgEx 함수는 IID_IPrintDialogCallback 및 IID_IObjectWithSite 모두에 대한 콜백 개체에서 IUnknown::QueryInterface를 호출 하여 지원되는 인터페이스를 결정합니다.

콜백 정보를 검색하지 않으려면 lpCallbackNULL로 설정합니다.

nPropertyPages

형식:DWORD

lphPropertyPages 배열의 속성 페이지 핸들 수입니다.

lphPropertyPages

형식: HPROPSHEETPAGE*

Print 속성 시트에 추가할 속성 페이지 핸들의 배열을 포함합니다. 추가 속성 페이지는 일반 페이지를 따릅니다. CreatePropertySheetPage 함수를 사용하여 이러한 추가 페이지를 만듭니다. PrintDlgEx 함수가 반환되면 lphPropertyPages 배열의 모든 HPROPSHEETPAGE 핸들이 제거됩니다. nPropertyPages가 0이면 lphPropertyPages는NULL이어야 합니다.

nStartPage

형식:DWORD

처음에 표시되는 속성 페이지입니다. 일반 페이지를 표시하려면 START_PAGE_GENERAL 지정합니다. 그렇지 않으면 lphPropertyPages 멤버에 지정된 배열에서 속성 페이지의 인덱스(0부터 시작)를 지정합니다. 일관성을 위해 속성 시트는 항상 일반 페이지에서 시작하는 것이 좋습니다.

dwResultAction

형식:DWORD

입력 시 이 멤버를 0으로 설정합니다. PrintDlgEx 함수가 S_OK 반환하는 경우 dwResultAction에는 대화 상자의 결과가 포함됩니다. PrintDlgEx에서 오류를 반환하는 경우 이 멤버는 무시해야 합니다. dwResultAction 멤버는 다음 값 중 하나일 수 있습니다.

PD_RESULT_APPLY

사용자가 적용 단추를 클릭하고 나중에 취소 단추를 클릭했습니다. 이는 사용자가 속성 시트에서 변경한 내용을 적용하려고 하지만 아직 인쇄하지 않음을 나타냅니다. PRINTDLGEX 구조체에는 적용 단추를 클릭할 때 사용자가 지정한 정보가 포함됩니다.

PD_RESULT_CANCEL

사용자가 취소 단추를 클릭했습니다. PRINTDLGEX 구조체의 정보는 변경되지 않습니다.

PD_RESULT_PRINT

사용자가 인쇄 단추를 클릭했습니다. PRINTDLGEX 구조체에는 사용자가 지정한 정보가 포함됩니다.

설명

hDevModehDevNames모두 NULL인 경우 PrintDlgEx는 현재 기본 프린터를 사용하여 속성 시트를 초기화합니다. 다른 프린터의 속성 시트를 초기화하려면 DEVNAMES 구조체의 wDeviceOffset 멤버를 사용하여 프린터 이름을 지정합니다.

DEVMODE 구조체의 dmDeviceName 멤버도 프린터 이름을 지정합니다. 그러나 dmDeviceName 은 32자로 제한되며 wDeviceOffset 이름은 그렇지 않습니다. wDeviceOffsetdmDeviceName 이름이 동일하지 않으면 PrintDlgExwDeviceOffset에 지정된 프린터를 사용하여 속성 시트를 초기화합니다.

PD_RETURNDEFAULT 플래그가 설정되고 hDevModehDevNames 가 모두 NULL인 경우 PrintDlgExhDevNameshDevMode 멤버를 사용하여 대화 상자를 표시하지 않고 현재 기본 프린터에 대한 정보를 반환합니다.

PrintDlgEx를 실행하는 동안 PRINTDLGEX 구조체에 지정한 DEVMODEDEVNAMES 구조체에 항상 현재 데이터가 포함되지 않을 수 있습니다. 이러한 이유로 초기 페이지에 대한 애플리케이션별 속성 페이지와 IPrintDialogCallback 루틴은 IPrintDialogServices 인터페이스를 사용하여 현재 프린터의 상태에 대한 정보를 검색해야 합니다.

참고

commdlg.h 헤더는 PRINTDLGEX를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
머리글 commdlg.h(Windows.h 포함)

추가 정보

일반 대화 상자 라이브러리

개념

Devmode

DEVNAMES

IPrintDialogCallback

IPrintDialogServices

PrintDlgEx

참조