ExtEscape 함수(wingdi.h)

ExtEscape 함수를 사용하면 애플리케이션이 GDI를 통해 사용할 수 없는 디바이스 기능에 액세스할 수 있습니다.

구문

int ExtEscape(
  [in]  HDC    hdc,
  [in]  int    iEscape,
  [in]  int    cjInput,
  [in]  LPCSTR lpInData,
  [in]  int    cjOutput,
  [out] LPSTR  lpOutData
);

매개 변수

[in] hdc

디바이스 컨텍스트에 대한 핸들입니다.

[in] iEscape

수행할 이스케이프 함수입니다. 다음 중 하나이거나 애플리케이션 정의 이스케이프 함수일 수 있습니다.

의미
CHECKJPEGFORMAT
프린터가 JPEG 이미지를 지원하는지 여부를 확인합니다.
CHECKPNGFORMAT
프린터가 PNG 이미지를 지원하는지 여부를 확인합니다.
DRAWPATTERNRECT
흰색, 회색 배율 또는 검은색 사각형을 그립니다.
GET_PS_FEATURESETTING
PostScript 드라이버에 대해 지정된 기능 설정에 대한 정보를 가져옵니다.
GETTECHNOLOGY
드라이버가 Postscript 드라이버인지 여부를 보고합니다.
통과
애플리케이션에서 프린터로 직접 데이터를 보낼 수 있습니다. 호환 모드 및 GDI 중심 모드에서 지원됩니다.
POSTSCRIPT_DATA
애플리케이션에서 프린터로 직접 데이터를 보낼 수 있습니다. 호환 모드에서만 지원됩니다.
POSTSCRIPT_IDENTIFY
PostScript 드라이버를 GDI 중심 또는 PostScript 중심 모드로 설정합니다.
POSTSCRIPT_INJECTION
PostScript 작업 스트림에 원시 데이터 블록을 삽입합니다.
POSTSCRIPT_PASSTHROUGH
PostScript 프린터 드라이버에 직접 데이터를 보냅니다. 호환 모드 및 PostScript 중심 모드에서 지원됩니다.
QUERYESCSUPPORT
디바이스 드라이버에서 특정 이스케이프를 구현하는지 여부를 결정합니다.
SPCLPASSTHROUGH2
애플리케이션이 문서 수준 저장 컨텍스트에 프라이빗 프로시저 및 기타 리소스를 포함할 수 있도록 합니다.

[in] cjInput

lpszInData 매개 변수가 가리키는 데이터의 바이트 수입니다.

[in] lpInData

지정된 이스케이프에 필요한 입력 구조체에 대한 포인터입니다. 설명을 참조하십시오.

[in] cjOutput

lpszOutData 매개 변수가 가리키는 데이터의 바이트 수입니다.

[out] lpOutData

이 이스케이프에서 출력을 받는 구조체에 대한 포인터입니다. ExtEscape가 쿼리 함수로 호출되는 경우 이 매개 변수는 NULL이 아니어야 합니다. 이 구조에서 반환할 데이터가 없으면 cbOutput 을 0으로 설정합니다. 설명을 참조하십시오.

반환 값

반환 값은 함수의 결과를 지정합니다. 구현만 확인하는 QUERYESCSUPPORT 프린터 이스케이프를 제외하고 함수가 성공하면 0보다 큽니다. 이스케이프가 구현되지 않은 경우 반환 값은 0입니다. 0보다 작은 반환 값은 오류를 나타냅니다.

설명

참고 이는 차단 또는 동기 함수이며 즉시 반환되지 않을 수 있습니다. 이 함수가 얼마나 빨리 반환되는지는 네트워크 상태, 인쇄 서버 구성 및 프린터 드라이버 구현과 같은 런타임 요인(애플리케이션을 작성할 때 예측하기 어려운 요소)에 따라 달라집니다. 사용자 인터페이스와의 상호 작용을 관리하는 스레드에서 이 함수를 호출하면 애플리케이션이 응답하지 않는 것처럼 보일 수 있습니다.
 
이 함수를 사용하여 드라이버 정의 이스케이프 값을 디바이스에 전달합니다.

이스케이프가 nEscape에서 정의된 이스케이프 중 하나가 아닌 한 Escape 함수를 사용하여 시스템 정의 이스케이프 값 중 하나를 디바이스에 전달합니다. ExtEscape 가 시스템 정의 이스케이프에서 제대로 작동하지 않을 수 있습니다. 특히 lpszInData 가 포인터인 멤버를 포함하는 구조체에 대한 포인터인 이스케이프는 실패합니다.

이 문서에 설명된 동작은 예상된 동작이지만 이 모델을 준수하는 것은 드라이버의 입니다.

lpszInDatalpszOutData에서 참조하는 변수는 동일하거나 겹치지 않아야 합니다. 입력 및 출력 버퍼 크기 변수가 겹치는 경우 호출이 반환된 후 올바른 값이 포함되지 않을 수 있습니다. 최상의 결과를 위해 lpszInDatalpszOutData 는 다른 변수를 참조해야 합니다.

CHECKJPEGFORMAT 프린터 이스케이프 함수는 프린터가 JPEG 이미지 인쇄를 지원하는지 여부를 결정합니다.

CHECKJPEGFORMAT 프린터 이스케이프 함수를 사용하기 전에 QUERYESCSUPPORT 프린터 이스케이프 함수를 호출하여 드라이버가 CHECKJPEGFORMAT를 지원하는지 여부를 확인합니다. CHECKJPEGFORMAT의 사용을 보여 주는 샘플 코드는 JPEG용 프린터 테스트 또는 PNG 지원을 참조하세요.

CHECKPNGFORMAT 프린터 이스케이프 함수는 프린터가 PNG 이미지 인쇄를 지원하는지 여부를 결정합니다.

CHECKJPEGFORMAT 프린터 이스케이프 함수를 사용하기 전에 QUERYESCSUPPORT 프린터 이스케이프 함수를 호출하여 드라이버가 CHECKJPEGFORMAT를 지원하는지 여부를 확인합니다. 샘플 코드는 JPEG용 프린터 테스트 또는 PNG 지원을 참조하세요.

DRAWPATTERNRECT 프린터 이스케이프는 Hewlett-Packard LaserJet 또는 LaserJet 호환 프린터에서 PCL(Page Control Language)의 패턴 및 규칙 기능을 사용하여 흰색, 회색 눈금 또는 단색 검은색 사각형을 만듭니다. 회색 눈금은 흑백 픽셀의 특정 혼합물을 포함하는 회색 패턴입니다.

애플리케이션은 QUERYESCSUPPORT 이스케이프를 사용하여 DRAWPATTERNRECT 이스케이프를 사용하기 전에 프린터가 패턴 및 규칙을 그릴 수 있는지 여부를 확인해야 합니다.

  • DRAWPATTERNRECT로 그린 규칙은 디바이스 컨텍스트에서 클리핑 영역의 적용을 받지 않습니다.
  • 애플리케이션은 불투명한 개체를 배치하여 DRAWPATTERNRECT 로 만든 패턴과 규칙을 지우려고 하면 안 됩니다.

프린터에서 흰색 규칙을 지원하는 경우 DRAWPATTERNRECT에서 만든 패턴을 지우는 데 사용할 수 있습니다. 프린터에서 흰색 규칙을 지원하지 않는 경우 이러한 패턴을 지우는 방법은 없습니다.

애플리케이션이 DRAWPATTERNRECT 이스케이프를 사용할 수 없고 디바이스가 프린터인 경우 일반적으로 PatBlt 함수를 대신 사용해야 합니다. PatBlt을 사용하여 검은색 사각형을 인쇄하는 경우 애플리케이션은 BLACKNESS 래스터 연산자를 사용해야 합니다. 그러나 디바이스가 플로터인 경우 애플리케이션은 Rectangle 함수를 사용해야 합니다.

GET_PS_FEATURESETTING 프린터 이스케이프 함수는 PostScript 드라이버에 대해 지정된 기능 설정에 대한 정보를 검색합니다.

이 이스케이프 함수는 PostScript 드라이버가 PostScript 중심 모드 또는 GDI 중심 모드인 경우에만 지원됩니다. PostScript 드라이버 모드를 설정하려면 POSTSCRIPT_IDENTIFY 이스케이프 함수를 호출합니다.

이 작업을 수행하려면 다음 매개 변수를 사용하여 ExtEscape 함수를 호출합니다.

GET_PS_FEATURESETTING 프린터 이스케이프 함수는 CreateDC 함수를 호출한 후 DeleteDC 함수를 호출하기 전에 언제든지 호출되는 경우 유효합니다.

GETTECHNOLOGY 프린터 이스케이프 함수는 프린터 드라이버의 유형을 식별합니다.

XPSDrv가 아닌 프린터의 경우 이 이스케이프는 드라이버가 Postscript 드라이버인지 여부를 보고합니다.

XPSDrv 프린터의 경우 이 이스케이프는 드라이버가 MXDC(Microsoft XPS 문서 변환기)인지 여부를 보고합니다. 이 경우 이스케이프는 0으로 끝나는 문자열 "http://schemas.microsoft.com/xps/2005/06"

PASSTHROUGH 프린터 이스케이프 함수는 프린터 드라이버에 직접 데이터를 보냅니다. 이 작업을 수행하려면 다음 매개 변수를 사용하여 ExtEscape 함수를 호출합니다.

PASSTHROUGH 프린터 이스케이프 함수는 GDI 중심 모드 또는 호환 모드의 PostScript 드라이버에서 지원되지만 PostScript 중심 모드에서는 지원되지 않습니다. PostScript 중심 모드의 드라이버는 POSTSCRIPT_PASSTHROUGH 이스케이프 함수를 사용할 수 있습니다. PostScript 드라이버 모드를 설정하려면 POSTSCRIPT_IDENTIFY 이스케이프 함수를 호출합니다.

EPSPRINTING 또는 PostScript 중심 애플리케이션에서 보낸 PASSTHROUGH 데이터의 경우 PostScript 드라이버는 수정하지 않습니다. 다른 애플리케이션에서 보낸 PASSTHROUGH 데이터의 경우 PostScript 드라이버가 BCP(이진 통신 프로토콜) 또는 TBCP(태그가 지정된 이진 통신 프로토콜) 출력 프로토콜을 사용하는 경우 드라이버는 "Adobe 직렬 및 병렬 통신 프로토콜 사양"에 설명된 대로 특수 문자에 대한 적절한 BCP 또는 TBCP 따옴표를 수행합니다. 즉, 애플리케이션은 ASCII 또는 순수 이진 PASSTHROUGH 데이터를 보내야 합니다.

POSTSCRIPT_DATA 프린터 이스케이프 함수는 프린터 드라이버에 직접 데이터를 보냅니다. 이 작업을 수행하려면 다음 매개 변수를 사용하여 ExtEscape 함수를 호출합니다.

POSTSCRIPT_DATA 함수는 호환 모드에서만 PostScript 드라이버에서 지원된다는 점을 제외하고 PASSTHROUGH 이스케이프 함수와 동일합니다. PostScript 중심 모드 또는 GDI 중심 모드에서는 PostScript 드라이버에서 지원되지 않습니다.

PostScript 중심 모드의 드라이버는 POSTSCRIPT_PASSTHROUGH 이스케이프 함수를 사용할 수 있으며 GDI 중심 모드의 드라이버는 PASSTHROUGH 이스케이프 함수를 사용할 수 있습니다. PostScript 드라이버의 모드를 설정하려면 POSTSCRIPT_IDENTIFY 이스케이프 함수를 호출합니다.

POSTSCRIPT_IDENTIFY 프린터 이스케이프 함수는 PostScript 드라이버를 GDI 중심 모드 또는 PostScript 중심 모드로 설정합니다.

드라이버를 GDI 중심 또는 PostScript 중심 모드로 전환하려면 먼저 QUERYESCSUPPORT 프린터 이스케이프 함수를 호출하여 드라이버가 POSTSCRIPT_IDENTIFY 프린터 이스케이프 함수를 지원하는지 여부를 확인합니다. 그렇다면 드라이버가 PSCRIPT 5.0이라고 가정할 수 있습니다. 그런 다음 다른 프린터 이스케이프 함수를 호출하기 전에 POSTSCRIPT_IDENTIFY 호출하고 PSIDENT_GDICENTRIC 또는 PSIDENT_PSCENTRIC 지정해야 합니다. 다른 프린터 이스케이프 함수를 호출하기 전에 QUERYESCSUPPORT 를 호출하고 프린터 이스케이프 함수를 POSTSCRIPT_IDENTIFY 합니다.

참고 PostScript 드라이버가 GDI 중심 모드 또는 PostScript 중심 모드로 설정된 후에는 POSTSCRIPT_IDENTIFY 프린터 이스케이프 함수를 더 이상 호출할 수 없습니다.
 
POSTSCRIPT_IDENTIFY 프린터 이스케이프 함수를 사용하지 않는 경우 PostScript 드라이버는 호환 모드이며 PASSTHROUGH, POSTSCRIPT_PASSTHROUGHPOSTSCRIPT_DATA 프린터 이스케이프 함수에 대해 동일한 지원을 제공합니다.

POSTSCRIPT_PASSTHROUGH, PASSTHROUGHPOSTSCRIPT_PASSTHROUGH 프린터 이스케이프 함수를 지원하는 PostScript 드라이버의 경우 동일합니다.

PostScript 중심 모드에서 애플리케이션은 POSTSCRIPT_PASSTHROUGH 이스케이프 함수를 사용하여 용지를 표시하는 모든 PostScript 출력을 담당합니다. GDI 함수는 허용되지 않습니다. 드라이버는 전체 문서 구조 및 프린터 컨트롤 설정을 담당합니다. 애플리케이션은 POSTSCRIPT_INJECTION 프린터 이스케이프 함수를 사용하여 특정 위치에서 작업 스트림에 원시 데이터 블록(DSC 주석 포함)을 삽입할 수 있습니다.

POSTSCRIPT_INJECTION 프린터 이스케이프 함수는 PostScript 작업 스트림의 지정된 지점에 원시 데이터 블록을 삽입합니다.

PostScript 드라이버는 GDI 중심 모드 또는 PostScript 중심 모드 지원에서 이 이스케이프 함수를 지원하지만 호환 모드에서는 지원하지 않습니다.

PostScript 드라이버의 모드를 설정하려면 POSTSCRIPT_IDENTIFY 이스케이프 함수를 호출합니다.

이 작업을 수행하려면 다음 매개 변수를 사용하여 ExtEscape 함수를 호출합니다.

드라이버는 내부적으로 삽입 데이터를 캐시하고 출력의 적절한 지점에서 내보낸다. 캐시된 정보는 더 이상 필요하지 않을 때 플러시됩니다. 요일에는 EndDoc 호출 후에 플러시됩니다.

GDI 중심 모드에서 애플리케이션은 POSTSCRIPT_INJECTION 프린터 이스케이프 함수를 사용하여 유효한 DSC 블록 데이터만 삽입할 수 있습니다. 유효한 DSC 블록은 다음 조건을 모두 충족해야 합니다.

  • "선"의 정수 시퀀스로 구성됩니다.
  • 각 "줄"은 "%%"로 시작해야 합니다.
  • 마지막 줄을 제외한 각 "줄"은 마지막 줄을 제외하고 CR>, <LF> 또는 <CR><LF>로 <끝나야 합니다. 마지막 줄이 CR, <LF 또는 <CR>>< LF>>로 <끝나지 않으면 드라이버는 주입 데이터의 마지막 바이트 다음에 CR><LF>를 추가합니다<.
  • 각 "줄"은 "%%"를 포함하여 255바이트 이하여야 하지만 CR>/<LF> 선 종료는 <계산하지 않아야 합니다.
POSTSCRIPT_PASSTHROUGH 프린터 이스케이프 함수는 PostScript 프린터 드라이버에 직접 데이터를 보냅니다.

PostScript 드라이버는 PostScript 중심 모드 또는 호환 모드이지만 GDI 중심 모드에서는 지원되지 않는 경우 이 이스케이프 함수를 지원합니다.

PostScript 드라이버의 모드를 설정하려면 POSTSCRIPT_IDENTIFY 이스케이프 함수를 호출합니다.

QUERYESCSUPPORT 프린터 이스케이프 함수는 프린터 이스케이프 함수의 구현을 확인합니다.

SPCLPASSTHROUGH2 프린터 이스케이프 함수를 사용하면 EPSPRINTING을 사용하여 PostScript 디바이스에 인쇄하는 애플리케이션이 문서 수준 저장 컨텍스트에 프라이빗 PostScript 프로시저 및 기타 리소스를 포함할 수 있습니다.

이 이스케이프는 Adobe Acrobat과의 이전 버전과의 호환성을 위해서만 지원됩니다. 다른 애플리케이션에서는 이 사용되지 않는 이스케이프를 사용하면 안 됩니다.

드라이버가 PostScript 스트림의 올바른 지점에서 삽입할 데이터를 캐시하도록 애플리케이션은 StartDoc 를 호출하기 전에 이 이스케이프를 호출해야 합니다. 이 이스케이프가 지원되는 경우 드라이버는 StartDoc 이전에 이스케이프 DOWNLOADFACE 호출도 허용합니다. 드라이버는 삽입할 데이터와 StartDoc 이전에 이스케이프 DOWNLOADFACE 호출에 필요한 데이터를 내부적으로 캐시하고 %%EndProlog 바로 앞에 모두 내보낸다. SPCLPASSTHROUGH2DOWNLOADFACE 호출 시퀀스는 데이터가 전달되는 순서대로 유지됩니다. 즉, 나중에 호출하면 이전 호출의 데이터 이후에 데이터 출력이 발생합니다. 드라이버는 사전 StartDoc 이스케이프 DOWNLOADFACE 호출에서 다운로드한 글꼴을 작업 scope 동안 제거할 수 없는 것으로 간주합니다.

이 이스케이프는 운영 체제에서 EMF 파일에 기록되지 않으므로 애플리케이션은 이스케이프를 사용하여 해당 작업에 대해 EMF 기록을 해제해야 합니다.

예제

예제는 JPEG 또는 PNG 이미지 크기 조정을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 wingdi.h(Windows.h 포함)
라이브러리 Gdi32.lib
DLL Gdi32.dll

추가 정보

Esc

GetDeviceCaps

인쇄 스풀러 API 함수

인쇄