시스템은 IME 윈도우의 변화나 조립 문자열의 변화 등 IME의 모든 상태 변화에 대해 WM_IME_로 시작되는 IME 메시지를 포커스를 가진 윈도우에게 보낸다.
WM_IME_SETCONTEXT
응용 프로그램이 활성/비활성화
WM_IME_NOTIFY
IMN_OPENSTATUSWINDOW
상태 윈도우를 열었다 // ??
한영 변환
WM_IME_NOTIFY
IMN_SETOPENSTATUS
IMN_SETCONVERSIONMODE
조립 윈도우
WM_IME_STARTCOMPOSITION
디폴트 IME 윈도우는 이 메시지를 받았을 때 조립 윈도우를 보여준다.
이 메시지를 DefWindowProc으로 보내지 않으면 조립 윈도우는 나타나지 않는다.
WM_IME_ENDCOMPOSITION
WM_IME_COMPOSITION
조립 상태가 변경될 때마다 조립 중인 문자열이 보내진다.
상태 변수에 현재 상태를 유지해서 버퍼를 적절히 조작해 줄 수 있다.
GCS_COMPSTR
아직 조립중
ImmGetCompositionString()
GCS_COMPSTR
GCS_RESULTSTR
확정
ImmGetCompositionString()
GCS_RESULTSTR
0을 리턴하면 완성된 문자에 대해 WM_IME_CHAR 메시지가 발생하지 않는다.
WM_IME_CHAR
문자 하나가 완성되었을 때 보내진다. wParam으로 완성된 문자의
코드가 전달되는데이 코드는 DBCS일 수도 있다.
0을 리턴하면 완성된 문자에 대해 WM_CHAR 메시지는 오지 않는다.
IsDBCSLeadByte()
WM_CHAR
완성된 글자의 상하위 바이트에 대해 두 번의 메시지
입력 컨텍스트
문자입력을 받아들이는 윈도우(편집/입력 창)들은 모두 입력 컨텍스트를 가진다.
시스템은 별도의 지정이 없어도 스레드마다 디폴트 입력 컨텍스트를 자동으로 생성하며 이 컨텍스트는 스레드 내의 모든 윈도우에 의해 공유된다. // ImmAssociateContext()
디폴트 입력 컨텍스트는 영문 입력모드로 시작
IME의 현재 상태에 대한 정보들
조립 문자열, 변환 모드, IME 윈도우의 위치 등
IME의 상태를 조사하거나 변경하고 싶다면 먼저 입력 컨텍스트의 핸들을 구해야 한다.
입력 컨텍스트로부터 상태를 구하고 변경하는 것 중에 가장 실용적인
예는 입력모드를 소프트웨어적으로 변환하는 것이다.
ImmGetContext()
ImmReleaseContext()
ImmGetConversionStatus()
변환 모드
IME_CMODE_NATIVE - 한글 입력모드
ImmSetConversionStatus()