. 유틸리티 함수

유틸리티 함수란 여러 가지 계산과 처리를 대신하는 일반함수들이다. 반복적으로 사용되므로 잘 작성해두어야 이후의 작업이 쉬워진다. Ime3에 있던 SetCaret, Insert 등의 함수가 바로 유틸리티 함수들이며 수시로 호출되어 캐럿을 옮기고 문자열을 삽입한다. 여러 줄 편집을 위해서는 다음과 같은 유틸리티 함수들이 필요하다. 파일 선두에 원형 선언부터 하도록 하자.

 

void MySetImeMode(HWND hEdit, BOOL bHan);

int GetLineSub(TCHAR *&p);

void GetLine(int Line, int &s, int &e);

int GetRowCount();

void GetRCFromOff(int nPos, int &r, int &c);

int GetOffFromRC(int r, int c);

void GetXYFromOff(int nPos, int &x, int &y);

 

나머지 함수들은 천천히 작성하기로 하고 MySetImeMode 함수만 일단 다음과 같이 작성한다.

 

void MySetImeMode(HWND hEdit, BOOL bHan)

{

     HIMC hImc;

     hImc=ImmGetContext(hEdit);

 

     if (bHan == TRUE) {

          ImmSetConversionStatus(hImc,IME_CMODE_NATIVE,IME_SMODE_NONE);

     } else {

          ImmSetConversionStatus(hImc,0,IME_SMODE_NONE);

     }

 

     ImmReleaseContext(hEdit,hImc );

}

 

OnCreate에서 이 함수를 가볍게 호출한다.

 

BOOL OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)

{

     HDC hdc;

     TEXTMETRIC tm;

 

    MySetImeMode(hWnd,TRUE);

     bComp=FALSE;

     ....

 

이 함수는 IME 입력모드를 변환하는데 이미 앞장에서 작성해 본 것이다. 이 함수가 포함된 이유는 단순히 테스트의 편의를 위해서이다. 편집기를 만들다 보면 무수히 테스트를 해 볼 텐데 그때마다 입력하는 텍스트는 보통 우리는 민족 중흥의 역사적 사명을 띠고 ~ 나는 자랑스런 태극기 앞에 ~ 같은 누구나 외우는 문장일 것이다.

또는 기껏해야 기다림은 만남을 목적으로 하지 않아도 좋다 ~ 같은 시 구절이나 애국가 정도가 많이 애용될 것이다. 잘 돌아가는지 보려면 문장을 입력해 봐야 하는데 테스트를 하면서 책을 타이프할 리는 없고 외우는 것 중 하나를 입력할 수 밖에 없다. 그런데 보통 우리가 외우는 문장이라는 것들이 한글로 된 것이므로 아예 시작할 때부터 한글 입력모드로 시작하면 편하지 않겠는가? 팝송이나 게티즈버그 연설문 같은 것을 외우고 있다면 영문으로도 테스트할 수 있지만 아무래도 한글만큼 편할 리가 없다.

그래서 이 함수가 포함되었고 OnCreate에서 MySetImeMode(hWnd,TRUE);로 한글 입력모드로 시작하게 하였다. 그렇지 않으면 매번 <Shift+Space>나 한글키를 눌러야 되므로 얼마나 불편하겠는가? 이 기능은 오로지 몸 좀 편하자고 있는 것이지 꼭 필요한 것은 아니다. 어쨌거나 abcd보다는 가나다라가 우리한테 더 편리한 문자인 것은 분명하며 이제 시작하자 마자 한글을 입력할 수 있다. 개발중에는 이런 식으로 육신의 편안함을 도모해보는 것도 좋다.