다음을 통해 공유


복잡한 스크립트

앞에서 설명한 함수는 많은 언어에서 잘 작동하지만 복잡한 스크립트의 요구 사항을 처리하지 못할 수 있습니다. 복잡한 스크립트는 인쇄된 양식이 간단한 방식으로 렌더링되지 않는 언어입니다. 예를 들어 복합 스크립트는 양방향 렌더링, 문자 모양의 상황별 셰이핑 또는 문자 결합을 허용할 수 있습니다. 이러한 특수 요구 사항으로 인해 텍스트 출력의 제어는 매우 유연해야 합니다.

TextOut, ExtTextOut, TabbedTextOut, DrawTextGetTextExtentExPoint 텍스트를 표시하는 함수가 복잡한 스크립트를 지원하도록 확장되었습니다. 일반적으로 이 지원은 애플리케이션에 투명합니다. 그러나 복잡한 스크립트 셰이핑 모듈이 컨텍스트를 사용하여 문자 모양을 올바르게 다시 정렬하고 생성할 수 있도록 애플리케이션은 버퍼에 문자를 저장하고 한 번에 전체 텍스트 줄을 표시해야 합니다. 또한 문자 모양 너비는 컨텍스트에 따라 다를 수 있으므로 애플리케이션은 캐시된 문자 너비를 사용하는 대신 GetTextExtentExPoint 를 사용하여 줄 길이를 결정해야 합니다.

또한 복잡한 스크립트 인식 애플리케이션은 오른쪽에서 왼쪽으로 읽기 순서 및 해당 애플리케이션에 대한 오른쪽 맞춤에 대한 지원을 추가하는 것을 고려해야 합니다. 다음 코드를 사용하여 왼쪽과 오른쪽 사이의 읽기 순서 또는 맞춤을 전환할 수 있습니다.

// Save lAlign (this example uses static variables) 
static LONG lAlign = TA_LEFT;

// When user toggles alignment (assuming TA_CENTER is not supported). 

lAlign = TA_RIGHT;

// When the user toggles reading order. 

lAlign = TA_RTLREADING;

// Before calling ExtTextOut, for example, when processing WM_PAINT  

SetTextAlign (hDc, lAlign);

두 특성을 한 번에 전환하려면 다음 문을 실행한 다음, 앞에서 설명한 대로 SetTextAlignExtTextOut을 호출합니다.

lAlign = TA_RIGHT^TA_RTLREADING;  //pre-inline !

Uniscribe를 사용하여 복잡한 스크립트를 처리할 수도 있습니다. Uniscribe는 복잡한 스크립트에 대해 미세한 수준의 제어를 허용하는 함수 집합입니다. 자세한 내용은 유니스크립 트 및 복잡한 스크립트 처리를 참조하세요.