중국어 IME 에서 Reading Window Position 설정이 가능한가요?

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
plotonix
Posts: 34
Joined: 2006-11-20 12:54
Contact:

중국어 IME 에서 Reading Window Position 설정이 가능한가요?

Post by plotonix »

중국어 IME 에서 Reading Window Position 설정이 가능한가요?

(입력기 - Microsoft Pinyin IME 3.0)


Reading Window가 Composition Window를 따라 다니는 것 같더군요.

Composition Window는 DefWindowProc에 WM_IME_COMPOSITION (GCS_COMPSTR, GCS_RESULTSTR)

가 넘어갈 때 생성/삭제 (또는 Show/Hide) 되더라구요.. @_@


문제는 Composition Window를 보여주지 않고, Reading Window만 원하는 위치에 보여주고 싶은데..

방법이 없을까요?


WM_IME_COMPOSITION (GCS_COMPSTR, GCS_RESULTSTR) 메시지를 DefWindowProc에 넘기지 않으면,

Composition Window가 안보이는 대신에, Reading Window가 항상 화면 왼쪽 위에 보여지더군요. ㅠ_ㅠ


조언 부탁드립니다.

감사합니다. :D
airshark
Posts: 199
Joined: 2006-07-16 22:49

제 생각에는

Post by airshark »

IME 기본적인 동작 방식은 IME 에서 발생시켜 전달한 이벤트에 대해서 0을 리턴하면 사용자가 이미 처리한 것으로 생각하고 기본적인 동작을 하지 않으며 DEF로 들어갈 경우에는 윈도우에서 설정한 기본 동작을 취하게 되어있습니다.

즉, WM_IME_NOTIFY 에서 wParam의 값이 IMN_OPENCANDIDATE와 IMN_CLOSECANDIDATE일 경우에는 return false; 를 해주시면 디폴트 윈도우가 보여지지 않게 됩니다. 그리고 디폴트 리딩 윈도우의 포지션을 변경한 다고 하셨는데, 그 부분에 대해서는 gpg자료실에 있는 ime 소스를 받아보시면 윈도우 포지션은 -1000, -100으로 이동시키는 소스 구문이 있습니다. 참고하세요.

여담입니다만 제 생각에는 게임에서 사용될 것이라면 디폴트 윈도우를 보여줄 것이 아니라 해당 게임에 맞는 이미지를 토대로 만든 새로운 윈도우들로 구성하는 편이 더 보기 좋을 것 같군요.
안녕하세요 삽질 전문 Airshark입니다.
plotonix
Posts: 34
Joined: 2006-11-20 12:54
Contact:

Post by plotonix »

먼저 관심 가지고 답변 달아주셔서 감사드립니다~ :D

gpg 자료실 소스는 zupet님이 공개하신 소스 말씀하시는 것인지요?

공개해주신 자료는 전반적으로 살펴보았는데, 말씀하신 부분은 보이지 않는 것 같습니다.

(reading, composition, candidate 윈도우를 모두 안보이게 하는 것으로 처리되어 있지 않나요?)


시간이 허락되신다면, 어떤 부분인지 가르쳐 주시면 감사하겠습니다. :)
airshark
Posts: 199
Joined: 2006-07-16 22:49

추가 답변입니다.

Post by airshark »

plotonix wrote:먼저 관심 가지고 답변 달아주셔서 감사드립니다~ :D

gpg 자료실 소스는 zupet님이 공개하신 소스 말씀하시는 것인지요?

공개해주신 자료는 전반적으로 살펴보았는데, 말씀하신 부분은 보이지 않는 것 같습니다.

(reading, composition, candidate 윈도우를 모두 안보이게 하는 것으로 처리되어 있지 않나요?)


시간이 허락되신다면, 어떤 부분인지 가르쳐 주시면 감사하겠습니다. :)
imm.h 헤더 파일에 보시면

ImmSetCompositionWindow
ImmSetStatusWindowPos
ImmSetCandidateWindow

위와 같은 함수들이 있습니다. 이 함수를 보시면 인포메이션 스트럭트를 넘겨주게 되어있는데, 그 멤버중에 포지션을 나타내는 것이 있으니 이것으로 원하는 위치로 이동시킬 수 있을 겁니다.

예전에 IME를 처음 만들었을 때에는 IME 윈도우 창을 안보이게 하려고 -100, -100으로 이동시켰었는데요. 아마도 그 때 이 함수를 사용했던 것 같습니다.

그리고 추가적으로 IME에 관해서 더 궁금한 것이 있으시다면 제 블로그를 소개해드리겠습니다.

저도 IME 개발하면서 모은 자료들이 조금 있거든요.

http://blog.naver.com/sexychs 이 블로그의 메뉴중에 ime 메뉴에 가시면 몇가지 읽어볼 만한 것들이 있을 겁니다. 그러면 수고하세요!
안녕하세요 삽질 전문 Airshark입니다.
Locked