예전부터 고쳐야지 고쳐야지를 맘만 먹고 못 고쳤던 IME 문제를 해결하였습니다.

GFx를 이용하여 UI를 개발하면서 IME문제 (한글을 입력할 경우 조합시 한글이 깨지는 문제) 가 있었습니다. 참 답답하였죠. 예제와 포럼에 있는 글들을 싹 찾아서 똑같이 해보았것만 똑같은 현상이 일어났습니다. 정확하게는 "한글" 이라는 글자를 입력할 경우 "한+ㄱ+ㅡ"를 입력하는 중에 Text필드에서는 "한뉢"이라는 글자가 나오는 문제였습니다. 조합시 깨지는 거죠. 아.. 첨엔 조합글자에 대한 폰트의 문제이구나.라고 생각하에 폰트를 swf파일에 포함도 시켜보고 저희가 쓰고 있는 fontlib를 똑같이 마춰보기도 하고 별짓을 다해보았으나.. 역시 똑같은 증상만 나오더라구요. (참고로 GFx에서는 한글이 코어에 다 포함이 되고 있어 따로 IME 셋팅을 안하셔도 됩니다.) 한 일주일을 열심히 찾아봤습니다. 역시나..ㅜ.ㅜ 결론적으로는 제가 일주일동안 곰곰히 생각한 결과 Gamebryo엔진에 대한 문제라고 생각을 했습니다. 찾아본결과 틀린 부분이 한 부분이였거든요. 메세지처리에서 OnDefult가 먼저 불리느냐 Process가 먼저 불리느냐에 차이...! 예제에서는 OnDefault부분을 먼저 처리를 하고 Process함수를 처리를 하는데 저희쪽에서는 Process를 먼저 처리를 하더군요. (자세히 Gamebryo엔진 Application 메세지 처리 부분을 안보았지만...그렇게 호출을 하는 것 같습니다. 콜스택에도 그렇게 나오니깐요..)

저희 파트장님과 함께 열심히 찾아본 결과~! 맞습니다. Process를 먼저 처리를 해서 TranslateMessage와 DispatchMessage를 하면서 메세지의 code가 바뀌어서 생기는 문제였습니다. (정확히 DispathMessage입니다.) 아~~~~~~~ 얼마나 허무하던지.. 아무튼 이문제를 프레임웍을 전혀 안고치고 최적의 꽁수를 펼쳐~ 해결할 방법을 모색한 결과~!
기존에 Process에서 해결하고 있었던 GFx Handle 이벤트를 OnDefault와 같이 처리를 하도록 바꿨습니다. 기존에는 PreProcessKeyboard로 키다운, 키업을 IME Message를 던졌는데 이걸 IME관련 메세지 (WM_IME_SETCONTEXT, WM_IME_CHAR등등 )을 여기서도 같이 처리하겠끔 바꿨습니다. 단 GFx 이벤트 타입은 IME_PreProcessKeyboard로 설정을 하구요.

저와 같이 Gamebryo 2.6에 Scaleform 3.2 인테그레이션 해서 쓰시는 (3.1도 마찬가지 일 것입니다.) 분들은 이와 같은 방법으로 해결하셔도 좋을 듯 합니다. 단~! 이 방법이 과연 옳은 방법인지는 저도 잘 모르겠습니다. 정확히는 프레임웍의 호출 순서를 바꿔야 하겠죠.
아무튼 맘 내키지 않는 방법입니다. ㅋ ^-^