본문 바로가기

Application Programming Interface/Windows API

Windows DDK 문서 IMEIMES.DOC - 5. ImeSetCompositionString 함수, 6. Soft Keyboard(소프트 키보드)

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

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

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


ImeSetCompositionString 함수

 ImeSetCompositionString 함수는 IME 조합 문자열(Composition String)을 다루는 데 어플리케이션이 사용하는 함수입니다. 서로 다른 플래그를 지정함으로써 어플리케이션은 조합 문자열, 속성, 절(clause) 등을 수정할 수 있습니다.

 이 함수의 두 번째 매개변수인 dwIndex는 어떻게 조합 문자열이 IME에서 조정되어야 하는지를 지정합니다. 이 값은 SCS_SETSTR ,SCS_CHANGEATTR, SCS_CHANGECLAUSE, SCS_QUERYRECONVERTSTRING와 같은 값을 포함할 수 있습니다. 각 값은 특정 기능을 나타냅니다.

ImeSetCompositionString 함수의 기능

 IME가 ImeSetCompositionString의 기능을 갖지 않을 때 이 IME는 IMEINFO 구조체에서 어떤 SCS로 시작하는 기능도 지정할 수 없습니다. IME가 ImeSetCompositionString 기능을 다룰 수 있을 때 이 IME는 SCS_COMPSTR 속성을 지정할 수 있습니다. IME가 조합 문자열로부터 문자열을 읽는 작동을 생성할 수 있을 때 이 IME는 SCS_CAP_MAKEREAD 비트를 지정할 수 있습니다.

 IME가 SCS_CAP_COMPSTR 기능을 가질 때, ImeSetCompositionString 함수는 호출될 수 있습니다. 이 호출에 응답하여 IME는 어플리케이션에 의해 WM_IME_COMPOSITION 메시지를 생성하며 새로운 조합 문자열을 사용할 수 있습니다.

SCS_SETSTR

 ImeSetCompositionStringdwIndex가 SCS_SETSTR을 포함할 때 IME는 hIMCCOMPOSITIONSTR 구조체의 내용을 비울 수 있습니다.

 필요하다면, IME는 후보(candidate) 문자열 정보를 업데이트 할 수 있고 IMN_OPENCANDIDATE, IMN_CHANGECANDIDATE 및 IMN_CLOSECANDIDATE 서브 메시지를 동반하는 WM_IME_NOTIFY 메시지를 생성할 수 있습니다.

 아래와 같이 서로 다른 입력 매개변수에 기초하여 IME는 어플리케이션의 요구 사항에 응답할 필요가 있습니다.

  • ImeSetCompositonString 함수의 lpRead 매개변수가 가능할 때
    IME는 lpRead로부터 읽어들인 문자열을 통해 조합 문자열을 생성해야 합니다. 그 다음 새로 만들어진 조합 문자열와 lpRead로부터 읽어들인 문자열을 위해 IME는 속성과 절(clause) 정보를 생성합니다.
    IME는 GCS_COMP 또는 GCS_COMPREAD를 동반하는 WM_IME_COMPOSITION 메시지를 생성합니다. 때때로 IME는 자동으로 변환 작동을 마무리할 수 있습니다. IME는 GCS_COMPxxxx를 대신하여 GCS_RESULT 또는 GCS_RESULTREAD를 동반하는 WM_IME_COMPOSITION 메시지를 생성할 수 있습니다.
  • ImeSetCompositonStringlpComp 매개변수가 가능할 때
    IME는 lpComp에 들어있는 조합 문자열로부터 조합 속성(Composition Attribute)와 절 정보(Clause Information)을 생성할 수 있습니다. 그 다음 IME는 GCS_COMP를 동반하는 WM_IME_COMPOSITION 메시지를 생성할 수 있습니다. IME가 SCS_CAP_MAKEREAD의 특성을 가질 때 IME는 동시에 새로운 읽기 문자열(reading string)을 생성해야 합니다. 그 다음 IME는 GCS_COMP 또는 GCS_COMPREAD를 동반하는 WM_IME_COMPOSITION 메시지를 생성합니다. 때때로 IME는 변환 작업을 자동으로 마무리합니다. IME는 GCS_COMPxxxx를 대신하여 GCS_RESULT 또는 GCS_RESULTREAD를 동반하는 WM_IME_COMPOSITION 메시지를 생성할 수 있습니다.
  • lpReadlpComp 매개변수가 사용 가능할 때
    IME는 조합 문자열과 읽기 문자열을 순서대로 생성해야 합니다. 이 경우 IME는 lpComp와 lpRead를 반드시 따를 필요는 없습니다. IME가 어플리케이션에서 지정한 lpComplpRead의 관련성을 찾을 수 없을 때, 조합 문자열을 수정해야 합니다. IME는 그 다음 속성과 절 정보를 새로운 조합 문자열과 lpRead의 읽기 문자열을 위해 생성합니다. 그리고 IME는 GCS_COMP 또는 GCS_COMPREAD를 동반하는 WM_IME_COMPOSITION 메시지를 생성합니다. 때때로 IME는 변환 작업을 자동으로 마무리 지을 수 있습니다. IME는 GCS_COMPxxxx를 대신하여 GCS_RESULT 또는 GCS_RESULTREAD를 동반하는 WM_IME_COMPOSITION 메시지를 생성할 수 있습니다.

SCS_CHANGEATTR

 SCS_CHANGEATTR은 속성 정보(attribute information)에만 유효합니다. IME는 조합 문자열, 절 정보를 업데이트 할 필요가 없습니다.

 IME는 처음에 새 속성이 수용 가능한지 아닌지를 체크합니다. 그 다음 hIMCCOMPOSITIONSTRING 구조체에서 새 속성을 설정할 수 있습니다. 마지막으로 IME는 WM_IME_COMPOSITION 윈도우 메시지를 생성합니다.

 필요하다면, IME는 IMN_OPENCANDIDATE, CHANGECANDIDATE 또는 IMN_CLOSECANDIDATE를 서브 메시지로 하는 WM_IME_NOTIFY 메시지를 통해 후보 문자 정보를 업데이트할 수 있고 후보 문자 메시지를 생성할 수 있습니다.

 이 기능을 위해 IME는 조합 문자열을 제거할 수 없습니다.

 IME는 다음과 같은 입력 매개변수에 기초한 어플리케이션의 요청에 응답할 필요가 있습니다.

  • ImeSetCompositionString 함수의 lpRead 매개변수가 사용 가능할 때
    IME는 lpRead의 새로운 속성을 따라야 합니다. 그리고 조합중인 문자열의 새 속성을 생성해야 합니다.이 경우 절(clause) 정보는 변하지 않습니다.
    IME는 GCS_COMP 또는 GCS_COMPREAD를 동반하는 WM_IME_COMPOSITION 메시지를 생성합니다. IME가 lpRead에 포함된 새 속성을 수용하지 않는다면, 어떤 메시지도 생성하지 않고 FALSE를 반환합니다.
  • ImeSetCompositonString 함수의 lpComp 매개변수가 사용 가능할 때
    IME는 lpComp로 들어온 새로운 속성을 따릅니다. 이 경우 절 정보는 변하지 않습니다.
    IME에 SCS_CAP_MAKEREAD 기능이 포함되었고 발음 기호 문자열이 사용 가능할 때, IME는 조합 중인 문자열에 새로운 속성을 생성해야 합니다.
  • lpReadlpComp가 모두 사용 가능할 때
    IME가 새 정보를 수용할 수 있다면 hIMC 핸들의 COMPOSITION 구조체에서 새 정보를 설정합니다. 그리고 GCS_COMP 또는 GCS_COMPREAD 메시지를 동반하는 WM_IME_COMPOSITION 메시지를 생성합니다.

SCS_CHANGECLAUSE

 SCS_CHANGECLAUSE는 조합 문자열과 발음 기호 입력에 대한 문자열과 속성에 영향을 줍니다.

 필요하다면 IME는 후보 문자열 정보를 업데이트 하고 후보 문자열 메시지로서 IMN_OPENCANDIDATE, CHANGECANDIDATE 또는 IMN_CLOSECANDIDATE의 서브 메시지를 동반하는 WM_IME_NOTIFY 메시지를 생성할 수 있습니다.

 IME는 다른 입력 매개변수에 기초한 어플리케이션의 요청에 응답할 필요가 있습니다. 아래가 바로 IME가 현재의 조합중인 문자열을 마무리하지 말아야 하는 경우입니다.

  • ImeSetCompositonString 함수의 lpRead 매개변수를 사용 가능한 경우
    IME는 lpRead로 들어온 새 절 정보를 따릅니다. 그리고 현재 조합중인 문자열의 발음 기호 입력에 대한 속성을 수정해야 합니다. IME는 GCS_COMP 또는 GCS_COMPREAD를 동반하는 WM_IME_COMPOSITION 메시지를 생성할 수 있습니다.
  • ImeSetCompositonString 함수의 lpComp 매개변수를 사용 가능한 경우
    IME는 lpComp로 들어온 새 절 정보를 따르며 현재 조합중인 문자열과 그 속성을 수정합니다. 그 다음 IME는 입력된 발음 문자열에 대한 절 정보와 속성을 업데이트 할 수 있습니다. IME는 GCS_COMPSTR 또는 GCS_COMPREAD를 동반한 WM_IME_COMPOSITION 메시지를 생성합니다.
  • lpReadlpComp가 사용 가능한 경우
    IME가 새 정보를 수용할 수 있다면 hIMCCOMPOSITION 구조체의 내용이 새 정보로 설정됩니다. 또한 GCS_COMP 또는 CGS_COMPREAD가 동반된 WM_IME_COMPOSITION 메시지를 발생시킵니다.
  • 소프트 키보드

     소프트 키보드는 IME가 표시하는 특별한 윈도우입니다. 일부 IME는 특수한 문자를 지원하기 때문에 IME는 이런 특수 문자를 지원하기 위한 소프트 키보드를 제공합니다. 이런 식으로, 사용자는 각 문자에 대한 자판의 배열을 기억하지 않아도 됩니다. 예를 들어 중국어를 입력할 때 어떤 IME는 부수 입력 방식을 제공하는 한편, 다른 IME는 발음 문자(reading character)로 보포모포(중국어의 주음표기 자판)를 제공할 수 있습니다.

     IME는 각 글쇠의 발음 문자를 수정할 수 있습니다. 그리고 사용자에게 이러한 글쇠의 변화를 변환 상태에 따라 알려줄 수 있습니다. 예를 들어 후보 문자 선택 시 IME는 사용자에게 선택한 글쇠를 알려줄 수 있습니다.

     IME는 소프트 키보드에 대한 자체 사용자 인터페이스를 생성할 수 있고 시스템에서 미리 정의된 소프트 키보드를 사용할 수도 있습니다. IME가 시스템 정의된 소프트 키보드를 사용하고자 한다면, ImeInqure가 호출될 때 IMEINFO 구조체의 fdwUICaps 멤버에 UI_CAP_SOFTKBD를 지정하면 됩니다.

     IME는 소프트 키보드 윈도우를 생성할 때 ImmCreateSoftKeyboard를 호출할 필요가 있습니다. 또한 생성된 소프트 키보드 윈도우를 보이거나 감추기 위해 ImmShowSoftKeyboard를 호출할 수 있습니다. 왜냐하면 소프트 키보드 윈도우는 사용자 인터페이스의 한 구성요소이기 때문에 해당 윈도우 소유자는 또한 사용자 인터페이스 윈도우이기 때문입니다.

     소프트 키보드에는 몇 가지 종류가 있습니다. 각각은 특정 국가, 특정 목적을 위해 디자인되었습니다. IME는 IMC_SETSOFTKBDSUBTYPE과 IMC_SETSOFTKBDDATA의 두 가지 방법을 통해 소프트 키보드로 입력되는 발음 기호를 수정할 수 있습니다.