한글 IME (Input Method Editing)를 구현

이 내용은 "한컴 프레스"에서 나온 "따라해보세요 Visual C++ 6" 에서 가져온 내용입니다.

 

 IME를 구현한다고 해서 직접 IME를 만들어보자는 것은 아니고, 위의 그림처럼 상태바에 한글/영문 상태를 구별할 수 있도록 출력하자는 것이다.

 미국 MS에서 만든 Visual C++ 6.0은 기본적으로 한글 IME 기능을 제공하지 않기 때문에 개발자 스스로 한글 IME에서 발생되는 메시지를 뷰에서 잡아 처리해야 한다. 한글 비주얼 베이직 5.0과 6.0에서는 기본으로 한글 IME 기능이 기본으로 제공되고 있다.

 여기서는 한/영 키를 누르면 한글과 영문이 바뀌며 출력되고, 그 페인 위에서 마우스 왼쪽 버튼을 눌러도 한영이 바뀌도록 구현한다.

1. StdAfx.h 파일에 다음과 같이 Imm.h 파일을 인클루드 한다.

 

2. 뷰의 헤더파일을 연다. 클래스 위저드에서 지원하지 않기 때문에 다음처럼 직접 코드를 기술한다.

 

3. 뷰의 cpp 파일에도 다음처럼 한 줄을 추가한다.

 

4. 위에서처럼 추가한 메시지에 대한 핸들러 코드를 뷰의 cpp 파일에 작성한다.

 

5. 4번에서 메인 프레임 클래스에 접근하기 위해서 뷰의 cpp 파일에 다음처럼 메인 프레임의 헤더파일을 인클루드 한다.

 그리고 m_wndStatusBar에 접근하기 위해 MainFrm.h 파일에 정의되어 있는 CStatusBar의 변수 m_wndStatusBar를 private에서 public으로 변경한다.

 

6. 5번까지 작성한 상태로 컴파일을 하면 초기에 한/영 이 출력되지 않다가 한/영 키를 누른 다음부터 제대로 동작하는 것을 알 수 있다.

 이것을 해결하기 위해 뷰의 OnInitialUpdate() 함수에 OnIMENotify() 함수의 내용을 한번 더 적는다.

 

7. 상태바의 한/영 페인을 마우스의 왼쪽버튼을 누를 때마다 바뀌도록 만들기 위해 몇 가지 작업을 해야 하겠다. 우선 CStatusBar에서 파생된 CMyStatusBar 클래스를 새로 만든다. 클래스 위저드에서 CStatusBar를 베이스 클래스로 지원하지 않기 때문에 CStatusBarCtrl에서 파생시킨 후 CStatusBarCtrl을 CStatusBar로 모두 바꾼다. (헤더파일과 cpp 파일 모두)

 그러다음 WM_LBUTTONDOWN 메시지를 오버라이드한다.

 

8. 한글 IME의 DLL인 imm32.dll을 임포트하기 위해 imm32.lib를 프로젝트에 추가한다.

참고사항

GetItemRect

 

PtInRect

 

SetPaneText

-  the end of this article -