본문 바로가기

Application Programming Interface/Windows API

Windows DDK 문서 IMEIMES.DOC - 11. IME File Format and Data Structures (IME 파일 포맷 및 데이터 구조) #4

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

IME 개발을 위한 Win32 다국어 IME 개요

버전 1.32
최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong


IME 통신을 위해 사용되는 구조체

다음은 IME 통신을 위해 사용되는 구조체에 대한 설명입니다.

CANDIDATELIST

CANDIDATELIST 구조체는 변환할 수 있는 후보 문자열에 대한 정보를 포함하고 있습니다.

/* CANDIDATELIST */
typedef struct tagCANDIDATELIST {
    DWORD dwSize;         // 이 구조체의 크기
    DWORD dwStyle;        // 후보 문자열들의 스타일
    DWORD dwCount;        // 변환 후보 문자열의 수
    DWORD dwSelection;    // 현재 선택된 후보 문자열의 순번
    DWORD dwPageStart;    // 화면상 처음으로 보여지는 후보 문자열의 순번. 사용자 Page Up/Down 키를 누름으로써 이 값이 달라집니다.
    DWORD dwPageSize;     // 한 페이지당 보여지는 문자열 수
    DWORD dwOffset[];     // 이 구조체 이후로 딸려오는 각 후보 문자열이 시작되는 오프셋
// TCHAR chCandidateStr[];    // 직렬화되어 계속 이어진 후보 문자열
} CANDIDATELIST;

CANDIDATELIST 구조체의 멤버

dwSize
구조체의 크기로서 오프셋 및 모든 후보문자열을 포함한 길이입니다. 단위는 바이트입니다.

dwStyle
후보 문자열의 스타일입니다. 아래의 값 중 하나 이상이 비트 OR되어 있습니다.

설명
IME_CAND_UNKNOWN여기 명시된 속성 이외의 스타일을 가집니다.
IME_CAND_READ후보 문자열들의 발음이 모두 같습니다. (동음이의어)
IME_CAND_CODE후보 문자열들이 한 종류의 문자코드 범위내에 있습니다.
IME_CAND_MEANING후보 문자열들의 뜻이 모두 같습니다. (동의어)
IME_CAND_RADICAL후보 문자열들이 부수가 모두 같은 문자로 되어 있습니다.
IME_CAND_STROKES후보 문자열들이 획수가 모두 같은 문자로 되어 있습니다.

IME_CAND_CODE 스타일을 갖는 경우 후보 목록은 dwCount 멤버에 따라 특별한 구조체를 가집니다. dwCount의 값이 1인 경우 dwOffset 맴버는 오프셋이 아니라 1개의 더블 바이트 문자를 갖습니다. 또한 후보 문자열을 제공하지 않습니다. dwCount 멤버가 1 이상의 값인 경우 dwOffset 멤버는 본래의 오프셋 값을 가집니다. 또한 후보 문자열은 16진법으로 표기된 더블 바이트 문자의 코드 형태로 제공됩니다(candidate strings are text representations of individual DBCS character values in hexadecimal notation).

dwCount
후보 문자열의 수입니다.

dwSelection
선택된 후보 문자열의 순번(index)입니다.

dwPageStart
후보 문자열을 출력하는 윈도우에서 첫 번째로 보여지는 문자열의 순번입니다. 사용자가 Page Up/Page Down키를 누르면 이 값이 달라집니다.

dwPageSize
후보 문자열 윈도우에서 한 번에 보여주는 후보 문자열의 수입니다. 사용자는 Page Up/Page Down과 같이 IME가 지정한 키를 누름으로써 다음 페이지로 이동할 수 있습니다. 이 값이 0이면 어플리케이션이 직접 이 값을 지정할 수 있습니다.

dwOffset
이 구조체의 시작 번지로부터 첫 번째 후보 문자열이 시작되는 상대적인 오프셋입니다. 32비트 정수의 배열로서 두 번째, 세 번째 후보 문자열의 오프셋이 순서대로 기억되어 있습니다.

덧붙임

CANDIDATELIST 구조체는 ImmGetCandidateList 함수의 반환 값으로 사용됩니다. 메모리상에서 후보 문자열은 dwOffset 배열이 끝난 바로 뒤부터 기억되어 있습니다.

COMPOSITIONFORM

COMPOSITIONFORM 구조체는 IMC_SETCOMPOSITIONWINDOW 메시지와 IMC_SETCANDIDATEPOS 메시지에서 사용됩니다.

/* COMPOSITIONFORM */
typedef tagCOMPOSITIONFORM {
DWORD dwStyle;
POINT ptCurrentPos;
RECT rcArea;
}COMPOSITIONFORM;

COMPOSITIONFORM 구조체의 멤버

dwStyle
위치 스타일로서 아래의 비트 플래그들이 조합됩니다.

의미
CFS_DEFAULT컴포지션 윈도우를 기본 위치에 둡니다. IME 윈도우는 컴포지션 윈도우를 플로팅 윈도우(floating window)와 같이 클라이언트 영역 밖에서 표시할 수 있습니다.
CFS_FORCE_POSITIONptCurrentPos로 지정된 위치에 따라 컴포지션 윈도우의 왼쪽 위 모서리에 표시합니다. 좌표는 윈도우의 왼쪽 위 모서리를 기준으로 한 상대좌표입니다. 그리고 IME가 조정하는 값에 종속적이지 않습니다.
CFS_POINTptCurrentPos로 지정된 위치에 따라 컴포지션 윈도우의 왼쪽 위 모서리에 표시합니다. 좌표는 윈도우의 왼쪽 위 모서리를 기준으로 한 상대좌표입니다. 그리고 IME가 조정하는 값에 종속적입니다.
CFS_RECTrcArea로 주어진 위치에 컴포지션 윈도우를 표시합니다. 이 좌표는 컴포지션 윈도우를 포함하는 윈도우의 왼쪽 위 좌표를 기준으로 한 상대 좌표입니다.

ptCurrentPos
컴포지션 윈도우의 왼쪽 위 모서리 좌표입니다.

rcArea
컴포지션 윈도우의 왼쪽 위와 오른쪽 아래 사이의 사각 영역입니다.

덧붙임

어플리케이션으로부터 전달된 COMPOSITIONFORM 구조체의 스타일이 CFS_POINT 또는 CFS_FORCE_POINT일 때 IME는 컴포지션 문자열을 ptCurrentPos에서 지정한 위치부터 출력해나갈 것입니다. 스타일이 CFS_RECT이면 컴포지션 문자열은 rcArea에서 지정한 영역 내에서 출력될 것입니다. 그렇지 않다면 rcArea는 어플리케이션 윈도우의 클라이언트 영역을 나타냅니다.

어플리케이션이 컴포지션 문자열의 글꼴을 지정했다면 컴포지션 윈도우는 폰트의 컴포지션 글꼴의 Escapement만큼 회전될 것입니다. 컴포지션 문자열의 방향은 컴포지션 윈도우에 있는 글꼴의 Escapement를 따릅니다. IME는 그 다음 컴포지션 문자열을 출력합니다. 다음은 컴포지션 글꼴의 Escapement 값을 다양하게 지정하였을 때 이 과정을 설명한 것입니다.

  • 컴포지션 글꼴의 Escapement가 0이면

    전형적으로 컴포지션 글꼴의 Escapement는 0입니다. 이 경우 구조체의 ptCurrentPos는 문자열의 왼쪽 위 좌표를 나타냅니다. 모든 IME는 이 유형을 지원합니다.

  • 컴포지션 글꼴의 Escapement가 2700이면

    이 경우 문자열이 수직으로 출력됩니다. 어플리케이션이 세로쓰기를 하려면 ImmCompositionFont 함수를 사용하여 컴포지션 폰트의 Escapement 값을 2700으로 설정하면 되고 컴포지션 문자열이 세로 방향으로 써내려가질 것입니다. IME는 이런 유형의 컴포지션 윈도우를 지원하기 위해 UI_CAP_2700, UI_CAP_ROT90 또는 UI_CAP_ROTANY를 제공하는 것입니다.

  • 컴포지션 글꼴의 Escapement가 900 또는 1800이면

    IME는 이런 유형의 컴포지션 윈도우를 지원하기 위해 UI_CAP_ROT90 또는 UI_CAP_ROTANY를 제공합니다.

  • 컴포지션 글꼴의 Escapement가 임의의 값인 경우

    IME는 이런 유형의 컴포지션 윈도우를 지원하기 위해 UI_CAP_ROTANY를 제공합니다.

알림

UI_CAP_ROT90과 UI_CAPS_ANY는 IME의 향상된 옵션입니다. UI_CAP_2700을 사용할 것을 권장합니다.