GCP_RESULTSA 구조체(wingdi.h)
GCP_RESULTS 구조체에는 문자열의 문자에 대한 정보가 포함됩니다. 이 구조체는 GetCharacterPlacement 함수의 결과를 받습니다. 일부 언어의 경우 배열의 첫 번째 요소에는 더 많은 언어 종속 정보가 포함될 수 있습니다.
구문
typedef struct tagGCP_RESULTSA {
DWORD lStructSize;
LPSTR lpOutString;
UINT *lpOrder;
int *lpDx;
int *lpCaretPos;
LPSTR lpClass;
LPWSTR lpGlyphs;
UINT nGlyphs;
int nMaxFit;
} GCP_RESULTSA, *LPGCP_RESULTSA;
멤버
lStructSize
구조체의 크기(바이트)입니다.
lpOutString
출력 문자열을 수신하는 버퍼에 대한 포인터이거나 출력 문자열이 필요하지 않은 경우 NULL 입니다. 출력 문자열은 지정된 디바이스에 표시되는 순서대로 원래 문자열의 버전입니다. 일반적으로 출력 문자열은 원래 문자열과 동일하지만 문자열의 순서를 다시 지정해야 하고 GCP_REORDER 플래그가 설정되거나 원래 문자열이 최대 범위를 초과하고 GCP_MAXEXTENT 플래그가 설정된 경우 다를 수 있습니다.
lpOrder
순서 인덱스가 필요하지 않은 경우 정렬 인덱스를 수신하거나 NULL 인 배열에 대한 포인터입니다. 그러나 그 의미는 GCP_RESULTS 다른 요소에 따라 달라집니다. 문자 모양 인덱스가 반환될 경우 인덱스는 lpGlyphs 배열에 대한 것입니다. 문자 모양 인덱스가 반환되지 않고 lpOrder 가 요청되면 인덱스는 lpOutString용입니다. 예를 들어 후자의 경우 lpOrder[i] 값은 출력 문자열 lpOutString에서 lpString[i]의 위치입니다.
이는 일반적으로 GetFontLanguageInfo 가 원래 문자열의 순서를 다시 지정해야 한다는 GCP_REORDER 플래그를 반환할 때 사용됩니다. 예를 들어 텍스트가 오른쪽에서 왼쪽으로 실행되는 히브리어에서 lpOrder 배열은 원래 문자열에 있는 각 요소의 정확한 위치를 제공합니다.
lpDx
인접한 문자 셀 사이의 거리를 수신하거나 이러한 거리가 필요하지 않은 경우 NULL 인 배열에 대한 포인터입니다. 문자 모양 렌더링이 완료되면 문자가 아닌 문자 모양에 대한 거리가 있으므로 결과 배열을 ExtTextOut 함수와 함께 사용할 수 있습니다.
이 배열의 거리는 표시 순서대로 표시됩니다. 원래 문자열에서 i번째 문자의 거리를 찾으려면 다음과 같이 lpOrder 배열을 사용합니다.
width = lpDx[lpOrder[i]];
lpCaretPos
캐리트 위치 값을 받거나 캐리트 위치가 필요하지 않은 경우 NULL 인 배열에 대한 포인터입니다. 각 값은 해당 문자 바로 앞에 있는 캐리트 위치를 지정합니다. 일부 언어에서는 각 문자에 대한 캐리트의 위치가 문자의 왼쪽에 즉시 있지 않을 수 있습니다. 예를 들어 텍스트가 오른쪽에서 왼쪽으로 실행되는 히브리어에서 캐리트 위치는 문자의 오른쪽에 있습니다. 문자 모양 순서 지정이 완료되면 lpCaretPos 는 출력 문자열이 아닌 원래 문자열과 일치합니다. 즉, 인접한 일부 값이 동일할 수 있습니다.
이 배열의 값은 입력 순서입니다. 원래 문자열에서 i번째 문자에 대한 caret 위치 값을 찾으려면 다음과 같이 배열을 사용합니다.
position = lpCaretPos[i];
lpClass
및/또는 문자 분류를 수신하는 배열에 대한 포인터입니다. 값은 문자열에 문자를 배치하는 방법을 나타내며 GetStringTypeEx 함수에서 반환된 CT_CTYPE2 값과 유사하지만 동일하지는 않습니다. 배열의 각 요소를 0 또는 다음 값 중 하나로 설정할 수 있습니다.
또한 lpClass 배열의 값을 GCP_CLASSIN 플래그와 함께 제공할 때 다음을 사용할 수 있습니다.
GCP_REORDER 플래그를 사용하는 언어의 경우 GCP_CLASSIN 플래그와 함께 다음 값을 사용할 수도 있습니다. lpClass 배열의 아무 곳에서나 사용할 수 있는 이전 값과 달리 다음 값은 모두 배열의 첫 번째 위치에서만 사용됩니다. 모두 다른 분류와 결합합니다.
GCPCLASS_PREBOUNDLTR 및 GCPCLASS_PREBOUNDRTL GCPCLASSPOSTBOUNDLTR 및 GCPCLASSPOSTBOUNDRTL과 마찬가지로 상호 배타적입니다.
특정 방식으로 문자 레이아웃을 강제로 수행하려면 해당 배열 요소에 대한 분류를 미리 설정합니다. 함수는 이러한 미리 설정된 분류를 변경하지 않고 0으로 설정된 배열 요소에 대해서만 분류를 계산합니다. 사전 설정 분류는 GCP_CLASSIN 플래그가 설정되고 lpClass 배열이 제공된 경우에만 사용됩니다.
GetFontLanguageInfo가 현재 글꼴에 대한 GCP_REORDER 반환하지 않으면 GCPCLASS_LATIN 값만 의미가 있습니다.
lpGlyphs
문자열을 렌더링하는 데 사용되는 문자 모양을 식별하는 값을 수신하는 배열에 대한 포인터이거나 문자 모양 렌더링이 필요하지 않은 경우 NULL 입니다. 문자열에 문자 모양이 포함된 경우 배열의 문자 모양 수가 원래 문자열의 문자 수보다 작을 수 있습니다. 또한 순서를 다시 지정해야 하는 경우 문자 모양 순서가 순차적이지 않을 수 있습니다.
이 배열은 모든 형태의 합자, 커닝 또는 순서 전환이 있는 문자열에서 둘 이상의 작업이 수행되는 경우에 유용합니다. 후속 작업에 이 배열의 값을 사용하면 매번 문자 모양 인덱스를 생성하는 데 필요한 시간이 절약됩니다.
이 배열은 항상 문자 모양 인덱스를 포함하며 이 배열을 ExtTextOut 함수와 함께 사용할 때 항상 ETO_GLYPH_INDEX 값을 사용해야 합니다.
GCP_LIGATE 사용하면 함께 리게팅되는 문자 수를 제한할 수 있습니다. (예를 들어 아랍어에서는 3자 합자 가 일반적입니다.) 이 작업은 lpGcpResults-lpGlyphs>[0]에 필요한 최대값을 설정하여 수행됩니다. 최대값이 필요하지 않은 경우 이 필드를 0으로 설정해야 합니다.
GetFontLanguageInfo가 GCP_GLYPHSHAPE 플래그를 반환하는 아랍어와 같은 언어의 경우 문자가 단어의 시작, 가운데 또는 끝에 있는지 여부에 따라 문자의 문자 모양이 달라집니다. 일반적으로 입력 문자열의 첫 번째 문자도 단어의 첫 번째 문자가 되며 입력 문자열의 마지막 문자는 단어의 마지막 문자로 처리됩니다. 그러나 표시된 문자열이 스크롤된 텍스트의 섹션을 표시할 때와 같이 전체 문자열의 하위 집합인 경우 true가 아닐 수 있습니다. 이러한 경우 첫 번째 또는 마지막 문자가 초기 또는 최종 양식이 아닌 것으로 강제로 모양을 지정하는 것이 좋습니다. 이렇게 하려면 lpGlyphs 배열의 첫 번째 위치는 GCPGLYPH_LINKBEFORE 및/또는 GCPGLYPH_LINKAFTER 값으로 위의 합자 값의 OR 연산을 수행하여 사용됩니다. 예를 들어 값은 GCPGLYPH_LINKBEFORE | 2는 2자 합자는 최대 필수 요소이며 문자열의 첫 번째 문자는 단어 중간에 있는 것처럼 처리되어야 합니다.
nGlyphs
입력 시 이 멤버는 배열 포인터 멤버가 가리키는 배열의 크기로 설정해야 합니다. 출력 시 출력 배열에 입력된 문자 모양 수로 설정됩니다. 문자 모양 대체가 필요하지 않은 경우(즉, 각 입력 문자가 정확히 하나의 문자 모양에 매핑됨) 이 멤버는 입력 시와 동일합니다.
nMaxFit
GetCharacterPlacement 함수의 nMaxExtent 매개 변수에 지정된 익스텐트에 맞는 문자 수입니다. GCP_MAXEXTENT 또는 GCP_JUSTIFY 값이 설정된 경우 이 값은 원래 문자열의 문자 수보다 작을 수 있습니다. 이 멤버는 GCP_MAXEXTENT 또는 GCP_JUSTIFY 값이 지정되었는지 여부에 관계없이 설정됩니다. 출력 문자 모양 수를 지정하는 nGlyphs와 달리 nMaxFit 은 입력 문자열의 문자 수를 나타냅니다. 라틴어 SBCS 언어의 경우 동일합니다.
설명
lpGlyphs, lpOutString 또는 둘 다 필요하지 않은지 여부는 GetFontLanguageInfo 호출의 결과에 따라 달라집니다.
영어와 같은 언어에 대한 글꼴의 경우 GCP_DBCS, GCP_REORDER, GCP_GLYPHSHAPE, GCP_LIGATE, GCP_DIACRITIC 또는 GCP_KASHIDA 플래그가 반환되지 않는 경우 적절한 작업에는 배열이 필요하지 않습니다. (필수는 아니지만 계속 사용할 수 있습니다. lpOutString 배열을 사용하는 경우 GetCharacterPlacement에 전달된 lpInputString과 정확히 동일합니다.) 그러나 GCP_MAXEXTENT 사용되는 경우 lpOutString은 원본의 정확한 복사본이 아니라 잘린 문자열을 포함합니다.
히브리어와 같은 언어에 대한 글꼴의 경우 DO는 순서를 변경하지만 일반적으로 문자 모양이 더 이상 없는 경우 lpOutString을 사용해야 합니다. 그러면 화면에서 읽을 수 있는 순서로 문자열이 표시됩니다. 그러나 lpGlyphs 배열은 일반적으로 필요하지 않습니다. (글꼴이 TrueType/Open 글꼴인 경우 히브리어에는 추가 문자 모양이 있을 수 있습니다.)
GetFontLanguageInfo가 GCP_GLYPHSHAPE 플래그를 반환하는 태국어 또는 아랍어와 같은 언어의 경우 lpOutString은 GetCharacterPlacement에 전달된 문자열의 표시 가능한 순서를 제공하지만 값은 여전히 셰이핑되지 않은 문자입니다. 적절한 표시를 위해 lpGlyphs 배열을 사용해야 합니다.
참고
wingdi.h 헤더는 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 GCP_RESULTS 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
머리글 | wingdi.h(Windows.h 포함) |