IME 개발을 위한 Win32 다국어 IME 개요
버전 1.32
최종 수정일: 1998년 4월 1일, 번역: Luciano Jeong
리컨버전(Reconversion)
리컨버전은 Windows 98 및 Windows 2000을 위한 새로운 IME 기능입니다. 이는 이미 어플리케이션의 문서에 입력된 문자열을 재변환하는 능력을 지원합니다. 특히 어떤 문자열이든 IME는 해당 문자열을 인식할 수 있고 이 문자열에 대한 발음 또는 글쇠 정보로 역변환할 수 있고, 이 발음 또는 글쇠에 대응되는 다른 단어들에 대한 후보 목록을 보여줄 수 있습니다.
새롭고 진보된 지능형 IME는 완전한 문장에 대해서도 인식하고 해석할 수 있습니다. IME가 완전한 문장 또는 문장의 일부분 같이 문자열과 관련하여 더 나은 정보를 제공받으면 변환 성능과 정확성이 높아질 수 있습니다. 예를 들어 방금 재변환한 문자열과 전혀 다른 전체 문장을 제공함으로써 IME는 문자열을 발음 또는 글쇠 정보로 역변환하는 과정을 거치지 않고 재변환할 수 있습니다.
RECONVERTSTRING 구조체는 전체 문장을 저장할 수 있습니다. 또한 dwStartOffset과 dwLen 멤버로 문장에서 재변환할 문자열을 지목할 수 있습니다. dwStartOffset이 0이고 dwLen이 문자열의 전체 문자수면 IME는 전체 문장을 재변환합니다.
심플 리컨버전(Simple Reconversion)
간단한 재변환은 현재 입력중인 문자열과 변환할 문자열이 전체적으로 같은 경우를 뜻합니다. 이 경우 dwCompStrOffset과 dwTargetStrOffset이 0이고 dwStrlen, dwCompStrLen 및 dwTargetStrLen이 값이 서로 같습니다. IME는 구조체로 전달된 전체 문장을 컴포지션 문자열으로 제공합니다. 또한 이 변환 결과를 변환 목표 절(target clause)로 설정합니다.
노멀 리컨버전(Normal Reconversion)
효율적인 변환 결과를 위해 어플리케이션은 정보 문자열과 함께 RECONVERTSTRING 구조체를 제공합니다. 이 경우 컴포지션 문자열은 전체 문장이 아니지만 목표하고자 하는 문자열에 이상적으로 근접합니다. IME는 전체 문자열을 참조하여 컴포지션 문자열을 변환할 수 있습니다. 그 다음 변환 결과를 목표한 절(target clause)로 설정할 수 있습니다.
향상된 리컨버전(Enhanced Reconversion)
어플리케이션은 컴포지션 문자열과 완전히 다른 문자열을 목표 문자열로 설정할 수 있습니다. 목표 문자열은 IME에 의해 목표 문장에 최우선순위로 포함됩니다. RECONVERTSTRING 구조체에 있는 목표 문장은 항상 컴포지션 문자열의 일부여야 합니다.
어플리케이션이 리컨버전 도중 사용자의 컨트롤 포커스가 바뀌지 않도록 하고 싶다면 목표 문자열이 지정되어야 합니다. IME는 이를 참조할 수 있습니다.
IME 취소 재변환
자동 재변환에 따라 구성된 컴포지션 문자열을 사용자가 취소할 때, IME는 재변환하기 전 본래의 문자열을 결정해야 합니다. 그렇지 않으면 어플리케이션은 해당 문자열을 잃게 됩니다.
SCS_SETRECONVERTSTRING과 SCS_QUERYRECONVERTSTRING 플래그
어플리케이션은 ImmSetCompositionString 함수를 호출함으로써 IME가 문자열을 재변환하도록 요구할 수 있습니다. 이 때 어플리케이션은 새로운 컴포지션 문자열을 생성하기 위해 SCS_SETSTR 또는 SCS_SETRECONVERTSTRING 플래그를 지정할 수 있습니다. 그러나 SCS_SETRECONVERTSTRING를 사용함으로써 어플리케이션은 IME에게 RECONVERTSTRING 구조체를 전달해 더 나은 변환 성능을 얻을 수 있습니다.
처음에 어플리케이션은 SCS_QUERYRECONVERTSTRING을 동반하는 ImmSetCompositionString 함수를 호출해야 합니다. 선택된 IME는 전달받은 RECONVERTSTRING 구조체를 적절하게 재변환할 수 있습니다. 그 다음 어플리케이션은 IME가 새 컴포지션 문자열을 생성하도록 SCS_SETRECONVERTSTRING를 동반하는 ImmSetCompositionString 함수를 호출해야 합니다. 어플리케이션이 IME에게 SCS_QUERYRECONVERTSTRING으로써 이 구조체를 조정하도록 요청하였다면 효율적인 변환작업이 수행될 수 있습니다.
IMR_RECONVERTSTRING 및 IMR_CONFIRMRECONVERTSTRING 메시지
IME는 재변환작업을 수행하려 할 때, 어플리케이션에게 재변환할 문자열을 요구할 수 있습니다. 예를 들어, 사용자가 재변환 글쇠를 누르거나 IME 상태 윈도우의 재변환 버튼을 클릭한 경우 IME는 목표 문장을 얻기 위하여 IMR_RECONVERTSTRING가 동반된 WM_IME_REQUEST 메시지를 발생시킵니다. 처음에 IME는 RECONVERTSTRING의 예상 크기를 얻기 위해 lParam이 NULL인 상태로 이 메시지를 발생시킵니다. 그 다음 IME는 목표 문자열을 얻기 위한 버퍼를 준비합니다. 그리고 lParam에 버퍼의 포인터를 첨부하여 같은 메시지를 한번 더 발생시킵니다.
어플리케이션이 IMR_RECONVERTSTRING을 처리한 후에 IME는 어플리케이션에서 전달된 RECONVERTSTRING 구조체를 수정할 수도 그렇지 않을수도 있습니다. 마지막으로 IME는 RECONVERTSTRING 구조체를 확인하기 위해 IMR_CONFIRMRECONVERTSTRING가 동반된 WM_IME_REQUEST 메시지를 발생시킵니다.
IMR_CONFIRMRECONVERTSTRING에 응답하여 어플리케이션이 TRUE를 반환하면, IME는 IMR_CONFIRMRECONVERTSTRING 메시지와 함께 전달된 RECONERTSTRING 구조체를 기초로 하여 새 컴포지션 문자열을 생성합니다. 어플리케이션이 FALSE를 반환하면, IME는 IMR_RECONVERTSTRING 메시지와 함께 전달받은 본래의 RECONVERTSTRING 구조체에 기초한 새 컴포지션 문자열을 생성합니다. IME는 IMR_CONFIRMRECONVERTSTRING 메시지를 받기 전까지는 재변환을 위한 컴포지션 문자열을 생성하지 않을 것입니다.
SCS_QUERYRECONVERTSTRING 또는 IMR_CONFIRMRECONVERTSTRING 메시지를 받은 때에는 전달받은 문자열이 수정되어서는 안됩니다. 이 때는 재변환작업을 위해 CompStrOffset, CompStrLen, TargetStrOffset 및 TargetStrLen 멤버만이 수정가능합니다.