강좌,팁

[강좌:31] 한글 IME, 위치로~~(강력추천)

조회 수 17609 추천 수 0 2006.06.30 00:33:03
허창원 *.19.45.14

이제 LabWindows/CVI로 개발한 한글 입력 이용 프로그램의 품위가 달라집니다. 한글 IME 창은 있어야할 위치로 이동~~

---------------------------------------------------------------------------------------

[강좌:31] 한글 IME, 위치로~~

이용된 버전: LabWindows/CVI 7.1.1
강좌분류: 라이브러리 이용하기
활용수준: 중급
(활용수준은 난이도와는 별개의 개념으로 사용합니다)

차례
프롤로그
1. 이번 예제 프로그램의 개요
2. 작업준비
3. KDManip.dll의 KDIMM_AdjustIMMPosition() 함수 이용

    3.1 Import Library를 프로젝트에 추가
    3.2 문자입력 콜백함수 구현
에필로그

 

프롤로그
LabWindows/CVI가 많은 장점이 있음에도 불구하고, 늘 마음에 걸리던 문제가 있었으니 곧 한글 IME 창의 위치가 바탕화면의 왼쪽 상단에만 나타난다는 것입니다. 영어 버전의 프로그램이다보니 그럴 수밖에 없겠지만, 한글을 사용하는 우리네 입장에서는 도무지 불편하기 짝이 없습니다. 이러한 문제는 Windows 98 이전 시대의 마이크로소프트 프로그램에서도 마찬가지였지만, 이제는 대부분의 윈도 프로그램의 한글 문제는 해결되었고, 특히 한글을 입력할 때 한글이 조합되는 IME 창의 위치도 자연스럽게 현재 커서의 위치에 위치합니다. 그림 0.1에는 메모장의 한글IME 표시부분, 그림 0.2에는 인터넷 익스플로러의 주소창에 나타난 한글 IME 표시 부분입니다.

그림 0.1 메모장의 한글 IME 표시

 

그림 0.2 인터넷 익스플로러의 한글 IME 표시

그러나, LabWindows/CVI로 개발한 프로그램에서 한글을 입력하려면, 그림 0.3과 같은 난관에 봉착하게 됩니다. 이미 익숙해진 사람들은 의식하지 못하지만, 처음 프로그램을 이용하는 사람들은 당황하더군요.

그림 0.3 LabWindows/CVI에서 개발한 프로그램의 한글 IME 표시

이 문제를 해결해 보려고 노력한 사람이 많이 있었겠지만, 저도 이 문제를 해결해보려고 노력을 기울였고, 몇 번의 도전 끝에 그런대로 괜찮게 만들어 보았습니다. 이 기능은 KDManip.dll(2006.6.24일 이후버전)에 KDIMM_AdjustIMMPosition() 이라는 함수명으로 구현되어 있습니다.

 

1. 이번 예제 프로그램의 개요
이번 예제에서는 그림 0.3과 같이 String 컨트롤, Text Box 컨트롤, 그리고 Table 컨트롤을 만들고 각각의 콜백함수를 지정합니다. 한글 IME 창의 위치를 현재 커서의 위치에 표시되도록 할 것입니다. 각 컨트롤은 기본적으로 왼쪽 정렬되어 있습니다만, 오른쪽, 혹은 가운데 정렬로 바꿔서 테스트도 해보기 바랍니다. 약간의 차이가 있을 것입니다.

이번 강좌의 예제는 순전히 테스트를 위한 프로그램이 되겠습니다. 이제 작업을 해봅니다.

2. 작업준비
작업 준비 과정은 "[강좌:21] CVI 프로그래밍 시작단계 정의(2)" 강좌 글의
"2. LabWindows/CVI의 프로그래밍 작업 시작단계" 부분에 따라 아래와 같이 간단히 정리합니다.

프로젝트 파일명: WriteHangul.prj

화면구성은 그림 2.1에 보였습니다.

그림 2.1 WriteHangul 프로젝트의 화면구성

uir 파일 내의 각 컨트롤의 속성은 표 2.1과 같이 설정합니다.

표 2.1 컨트롤의 속성값

컨트롤 종류 Constant Name Callback Function Label 비고
String STRING

StringCB

String 컨트롤

 

Text Box

TEXTBOX

TextboxCB

Text Box 컨트롤

 

TABLE

TABLE

TableCB

Table 컨트롤

Row와 Column을 각각 3개 정도씩 추가합니다.

 

Panel의 속성은 표2.2와 같이 설정합니다.

표 2.2 Panel의 속성설정

Panel 속성설정

Constant Name

PANEL

Callback Function

PanelCB

Panel Title

한글 입력 테스트

그리고, 기본 소스를 생성합니다.

3. KDManip.dll 의 KDIMM_AdjustIMMPosition() 함수 이용
지금부터 이용할 라이브러리는 KDManip.dll 이고, 자료실(CVI정보나눔 자료실)에 업로드되어 있습니다. 아래의 이름으로 검색해보세요. (2006.6.24일 이후 버전이라야 됩니다.)

[라이브러리] KDManip.dll (2006.6.24버전)

그림 3.1에 다운로드받은 KDManip.dll 관련 파일들을 보였습니다. 실행시에는 dll 파일만 있으면 되지만, 프로그래밍할 때에는 헤더파일과 Import library가 모두 필요합니다.

그림 3.1 KDManip.dll 관련 파일

3.1 Import Library를 프로젝트에 추가
이제 KDManip.lib 파일을 프로젝트에 포함시킵니다. 헤더파일인 KDManip.h 파일도 프로젝트에 포함시켜두면 열어보기가 편리합니다. 그림 3.2에 추가된 프로젝트 창을 보였습니다.

그림 3.2 프로젝트에 추가된 KDManip.lib Import Library

DLL을 사용할 때의 일반적인 과정입니다.

3.2 문자입력 콜백 함수 구현
우선 그림 3.3과 같이 KDManip.h 헤더파일을 include합니다.

그림 3.3 KDManip.h 헤더파일 include

그리고, 각 콜백함수 내에서 KDIMM_AdjustIMMPosition() 함수가 호출되도록 한 라인씩만 추가하면 만사 OK입니다. 그림 3.4에 해당 코드를 보였습니다.

그림 3.4 한글 입력에 이용되는 컨트롤의 콜백함수들

이제, 프로그램을 빌드한 후에 실행해보는 것만 남았네요.

그림 3.5 String 컨트롤에 한글 입력

 

그림 3.6 Text Box 컨트롤에 한글 입력

 

그림 3.7 Table 컨트롤에 한글 입력

이제는 프로그램을 처음 사용하시는 분들이 한 글자를 두 번 타이핑하는 실수는 사라지겠습니다.

현재(2006.6.29일)까지 String 컨트롤에 대해서는 좌,우,가운데 정렬 모두 만족스럽고, Text Box는 좌, 우 정렬일 때 만족스러우며 가운데 정렬일 때는 좀 미흡합니다. Table 컨트롤에 대해서도 미흡한 점이 좀 있긴 하지만, 그런대로 아무 처리도 안한 것보다는 훨씬 나은 것 같습니다.

에필로그
KDIMM_AdjustIMMPosition() 함수의 기능을 구현하기 위해 처음 작업을 착수한 것은 2005년 11월 24일이었지만, 진행중인 프로젝트로 인해 시도만 하다가 보류해두었습니다. 그러다 2006년 3월에 다시 하루정도 진행하다가 중단되고, 다시 2006년 6월 23, 24일 양일간에 걸쳐 그런대로 괜찮게 다듬었습니다. 저에게는 그야말로 드라마틱한 작업이었습니다.

LabWindows/CVI (현재 8.0버전까지)개발툴 자체도 한글 IME 처리가 전혀 안된 것같은데, 앞으로 LabWindows/CVI에서 기본적으로 한글 입력 처리를 지원할 때까지는 아주 유용한 기능이 될 것 같습니다.

제가 수고한 노력의 결과를 모든 분들과 함께 나눌 수 있어서 감사할 따름입니다. 감사합니다.

하나님이 세상을 이처럼 사랑하사 독생자를 주셨으니 이는 저를 믿는 자마다 멸망치 않고 영생을 얻게 하려 하심이니라(요한복음 3장 16절)

 

극동테크(www.kdtechno.com) 허창원 드림

List of Articles
번호 제목 글쓴이 날짜 조회 수
96 [강좌:37] 테이블 셀로 파일을 드래그앤드롭하기 file [1] 허창원 2007-09-01 29668
95 [강좌:36] 테이블 셀에서 체크박스 기능 이용하기 file 허창원 2007-09-01 20932
94 [팁:17] 사용가능한 Com Port 찾기 file 허창원 2007-08-18 30615
93 [강좌:35] 엑셀(Excel) 파일에 출력하기(양식 유지한채로) [6] 허창원 2007-04-08 51612
92 [팁:16] 엑셀파일(xls)로 저장하기 [4] 허창원 2007-03-29 34015
91 [에러 최소화 습관 팁] 아직 나타내지 않은 Panel의 Control 값을 Set할 때 [1] 허창원 2006-11-25 26612
90 [팁:15] 엑셀에서 지원하는 파일(csv) 생성하기 [1] 허창원 2006-11-23 28617
89 [강좌:34] CVI의 최소화 기능 개선 [3] 허창원 2006-11-18 23946
88 [요약] [강좌:34] CVI의 최소화 기능 개선 허창원 2006-11-18 25738
87 [강좌:33] 컨트롤 배열 처리하기 [5] 허창원 2006-09-28 36894
86 [강좌:32] 시리얼포트의 콜백함수를 만들어 이용하기 [2] 허창원 2006-08-25 33655
» [강좌:31] 한글 IME, 위치로~~(강력추천) 허창원 2006-06-30 17609
84 [요약] [강좌:31] 한글 IME, 위치로~~(강력추천) [2] 허창원 2006-06-30 19644
83 [강좌:30] Panel을 마우스로 드래그하기(강좌29 업그레이드 버전) file 허창원 2006-06-29 12735
82 [요약] [강좌:30] Panel을 마우스로 드래그하기(강좌29 업그레이드 버전) 허창원 2006-06-29 14869
81 [강좌:29] 타이틀바 없는 Panel을 마우스로 드래그하기 [2] 허창원 2006-06-03 16769
80 [요약] [강좌:29] 타이틀바 없는 Panel을 마우스로 드래그하기 허창원 2006-06-03 15835
79 [팁:14] 프로그램 제거 단축아이콘 넣기(1차수정) [4] 허창원 2006-04-26 15142
78 [메모] 강좌의 종류를 분류해봅니다 [5] 허창원 2006-03-30 21162
77 [팁:13] 디버그 종료시에 뜨는 메시지 A non-debuggable thread... 방지 file [2] 허창원 2005-12-21 26419