ScriptShape 함수(usp10.h)

유니코드 실행에 대한 문자 모양 및 시각적 특성을 생성합니다.

구문

HRESULT ScriptShape(
  [in]      HDC             hdc,
  [in, out] SCRIPT_CACHE    *psc,
  [in]      const WCHAR     *pwcChars,
  [in]      int             cChars,
  [in]      int             cMaxGlyphs,
  [in, out] SCRIPT_ANALYSIS *psa,
  [out]     WORD            *pwOutGlyphs,
  [out]     WORD            *pwLogClust,
  [out]     SCRIPT_VISATTR  *psva,
  [out]     int             *pcGlyphs
);

매개 변수

[in] hdc

선택 사항입니다. 디바이스 컨텍스트에 대한 핸들입니다. 자세한 내용은 캐싱합니다.

[in, out] psc

스크립트 캐시를 식별하는 SCRIPT_CACHE 구조체에 대한 포인터입니다.

[in] pwcChars

실행을 정의하는 유니코드 문자 배열에 대한 포인터입니다.

[in] cChars

유니코드 실행의 문자 수입니다.

[in] cMaxGlyphs

생성할 최대 문자 모양 수와 pwOutGlyphs의 길이입니다. 적절한 값은 (1.5 * cChars + 16)이지만 이 값은 경우에 따라 충분하지 않을 수 있습니다. 자세한 내용은 주의 섹션을 참조하세요.

[in, out] psa

ScriptItemize에 대한 이전 호출의 결과를 포함하는 실행에 대한 SCRIPT_ANALYSIS 구조체에 대한 포인터입니다.

[out] pwOutGlyphs

이 함수가 cMaxGlyphs로 표시된 크기의 문자 모양 배열을 검색하는 버퍼에 대한 포인터입니다.

[out] pwLogClust

이 함수가 논리 클러스터 정보의 배열을 검색하는 버퍼에 대한 포인터입니다. 각 배열 요소는 유니코드 문자 배열의 문자에 해당합니다. 따라서 이 배열에는 cChars로 표시되는 요소 수가 있습니다. 각 요소의 값은 실행의 첫 번째 문자 모양에서 해당 문자를 포함하는 클러스터의 첫 번째 문자 모양까지의 오프셋입니다. fRTL 멤버가 SCRIPT_ANALYSIS 구조체에서 TRUE로 설정되면 배열을 읽을 때 요소가 감소합니다.

[out] psva

이 함수가 시각적 특성 정보를 포함하는 SCRIPT_VISATTR 구조체의 배열을 검색하는 버퍼에 대한 포인터입니다. 각 문자 모양에는 시각적 특성이 하나만 있으므로 이 배열에는 cMaxGlyphs로 표시되는 요소 수가 있습니다.

[out] pcGlyphs

이 함수가 pwOutGlyphs에 표시된 문자 모양 수를 검색하는 위치에 대한 포인터입니다.

반환 값

정상적으로 실행되는 경우 0을 반환합니다. 함수가 성공하지 못하면 0이 아닌 HRESULT 값을 반환합니다. 모든 오류 사례에서 모든 출력 매개 변수의 콘텐츠는 정의되지 않습니다.

오류 반환은 다음과 같습니다.

  • E_OUTOFMEMORY. cMaxGlyphs로 표시된 출력 버퍼 길이가 충분하지 않습니다.
  • E_PENDING. psc 매개 변수로 지정된 스크립트 캐시에 문자열을 셰이핑하기에 충분한 정보가 포함되어 있지 않으며, 함수가 셰이핑 프로세스를 완료할 수 없도록 디바이스 컨텍스트가 NULL로 전달되었습니다. 애플리케이션은 실행에 대해 올바른 디바이스 컨텍스트를 설정하고 hdc 의 적절한 값과 다른 모든 매개 변수를 동일하게 사용하여 이 함수를 다시 호출해야 합니다.
  • USP_E_SCRIPT_NOT_IN_FONT. 디바이스 컨텍스트에 해당하는 글꼴은 pwcChars로 표시된 실행에 필요한 스크립트를 지원하지 않습니다. 애플리케이션은 ScriptGetCMap 또는 다른 함수를 사용하여 글꼴을 선택하는 다른 글꼴을 선택해야 합니다.

설명

이 함수가 일반적으로 호출되는 컨텍스트에 대한 설명은 유니스크립을 사용하여 텍스트 표시 를 참조하세요.

이 함수가 E_OUTOFMEMORY 반환하는 경우 애플리케이션은 충분히 큰 버퍼가 제공될 때까지 연속적으로 더 큰 출력 버퍼를 사용하여 ScriptShape 를 반복적으로 호출할 수 있습니다. 코드 포인트에서 생성된 문자 모양 수는 스크립트 및 글꼴에 따라 달라집니다. 간단한 스크립트의 경우 유니코드 코드 포인트는 단일 문자 모양을 생성할 수 있습니다. 그러나 복잡한 스크립트 글꼴은 구성 요소에서 문자를 생성하여 문자의 몇 배에 달하는 문자 모양을 생성할 수 있습니다. 또한 잘못된 문자 표현과 같은 특수한 경우가 있습니다. 잘못된 시퀀스를 나타내기 위해 추가 문자 모양이 추가됩니다. 따라서 pwOutGlyphs 로 표시된 버퍼의 크기에 대한 적절한 추측은 문자 버퍼의 길이의 1.5배이며 드문 경우(예: 잘못된 시퀀스 표현)에 대해 추가로 16개의 문자 모양이 추가됩니다.

글꼴 또는 운영 체제에서 문자 모양 인덱스를 지원할 수 없는 경우 이 함수는 SCRIPT_ANALYSIS 구조체의 fNoGlyphIndex 멤버를 설정할 수 있습니다.

애플리케이션은 ScriptShape 를 호출하여 글꼴이 지정된 문자열의 문자를 지원하는지 확인할 수 있습니다. 함수가 S_OK 반환하는 경우 애플리케이션은 누락된 문자 모양에 대한 출력을 검사 합니다. fLogicalOrderSCRIPT_ANALYSIS 구조에서 TRUE로 설정된 경우 함수는 항상 원래 유니코드 문자와 동일한 순서로 문자 모양을 생성합니다. fLogicalOrderFALSE로 설정된 경우 함수는 오른쪽에서 왼쪽 항목을 역순으로 생성하므로 ScriptTextOut은 ExtTextOut를 호출하기 전에 역방향으로 설정할 필요가 없습니다.

SCRIPT_ANALYSIS eScript 멤버가 SCRIPT_UNDEFINED 설정되면 셰이핑이 비활성화됩니다. 이 경우 ScriptShape 는 글꼴 cmap 테이블에 있는 문자 모양을 표시합니다. 표에 문자 모양이 없으면 함수는 문자 모양이 누락되었음을 나타냅니다.

ScriptShape 는 실행 내에서 클러스터를 균일하게 시퀀스하고 클러스터 내에서 문자 모양을 균일하게 시퀀스합니다. ScriptItemize에서 SCRIPT_ANALYSISfRTL 멤버의 값을 사용하여 시퀀싱을 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽으로 식별합니다.

중요 Windows 8 시작: Windows 7에서 실행하는 기능을 유지하려면 Uniscribe를 사용하는 모듈이 라이브러리 목록에서 gdi32.lib 전에 Usp10.lib를 지정해야 합니다.
 

예제

다음 예제에서는 ScriptShape가 문자 배열(pwcChars) 및 문자 모양 배열(pwOutGlyphs)에서 논리 클러스터 배열(pwLogClust)을 생성하는 방법을 보여 줍니다. 실행에는 4개의 클러스터가 있습니다.

  • 첫 번째 클러스터: 하나의 문자 모양으로 표현되는 문자 1개
  • 두 번째 클러스터: 문자 3개로 표시되는 문자 1개
  • 세 번째 클러스터: 하나의 문자 모양으로 표시되는 세 문자
  • 네 번째 클러스터: 3개의 문자 모양으로 표시되는 두 문자
문자 배열, 여기서 c<n>u<m> 은 클러스터 n, 유니코드 코드 포인트 m을 의미합니다.
  • | c1u1 | c2u1 | c3u1 c3u2 c3u3 | c4u1 c4u2 |
문자 모양 배열, 여기서 c<n>g<m> 은 클러스터 n, 문자 모양 m을 의미합니다.
  • | c1g1 | c2g1 c2g2 c2g3 | c3g1 | c4g1 c4g2 c4g3 |
클러스터 배열, 즉 문자가 포함된 클러스터에 대한 오프셋(문자 모양)입니다.
  • | 0 | 1 | 4 4 4 | 5 5 |

요구 사항

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

추가 정보

유니스크립팅을 사용하여 텍스트 표시

SCRIPT_ANALYSIS

SCRIPT_CACHE

SCRIPT_VISATTR

ScriptItemize

ScriptShapeOpenType

ScriptTextOut

Uniscribe

Uniscribe 함수