'IME'에 해당되는 글 1건

  1. 2009.05.29 IME 입력모드 설정 5
2009. 5. 29. 17:47

IME 입력모드 설정



화상 키보드를 만들다가 한글 IME관련 처리를 하기위해 자료를 찾다가 다시 찾을까 겁이나서 포스팅!!
아래의 함수들을 사용해서 생각보다 쉽게 IME의 상태를 알아 올수 있다. 단점은 현재 자신의 프로그램 내의 IME만 알아오거나 바꾸는 것이 가능하고, 다른 프로그램것은 되질 않는다.

IME해당 함수를 사용하기 위해서는 Imm.h와 Imm32.lib를 포함해주어야 한다. Imm.h 는 windows.h에 포함되어 있으므로 생략해도 된다.

해당 윈도우의 Input Context를 가져오는 함수이다. 리턴값으로 Input Context의 핸들을 반환한다.
HIMC ImmGetContext ( HWND hWnd );
hWnd - input context를 받을 윈도우의 핸들

Input Context를 릴리즈 하고, Context에 할당된 메모리를 unlock 한다.
ImmGetContext()를 사용했다면, 반드시 ImmReleaseContext()를 사용해주어야 한다.
BOOL ImmReleaseContext ( HWND hWnd,
                                             HIMC hIMC
                                            );
hWnd - input context를 릴리즈할 윈도우의 핸들
hIMC - input context의 핸들

Conversion Status를 가져온다.
BOOL ImmGetConversionStatus ( HIMC hIMC,
                                                      LPDWORD lpfdwConversion,
                                                      LPDWORD lpfdwSentence
                                                    );
hIMC - 정보를 알고 싶은 input context의 핸들
lpfwdConversion - IME Conversion mode 값
lpfwdSentence - Sentence mode 값

현재 윈도우의 Conversion Status를 원하는 값으로 설정한다.
BOOL ImmSetConversionStatus ( HIMC hIMC,
                                                     DWORD fdwConversion,
                                                     DWORD fdwSentence
                                                    );
hIMC - input context 핸들, NULL이면 현재 active 상태인 context를 설정
lpfwdConversion - IME Conversion mode 값
lpfwdSentence - Sentence mode 값


IME Conversion Mode
              Value                                    Description
IME_CMODE_CHARCODE             Set to 1 if character code input mode; 0 if not.
IME_CMODE_EUDC                        Set to 1 if EUDC conversion mode; 0 if not.
IME_CMODE_FULLSHAPE               Set to 1 if full shape mode; 0 if half shape mode.
IME_CMODE_HANJACONVERT        Set to 1 if HANJA convert mode; 0 if not.
IME_CMODE_KATAKANA                 Set to 1 if KATAKANA mode; 0 if HIRAGANA mode.
IME_CMODE_NATIVE                   Set to 1 if NATIVE mode; 0 if ALPHANUMERIC mode.
IME_CMODE_NOCONVERSION       Set to 1 to prevent processing of conversions by IME;
                                                       0 if not.
IME_CMODE_ROMAN                      Set to 1 if ROMAN input mode; 0 if not.
IME_CMODE_SOFTKBD                   Set to 1 if Soft Keyboard mode; 0 if not.


아래는 현재 윈도우의 한영 모드를 알아와서, 한글모드이면 영문으로, 영문모드이면 한글모드로 세팅을 바꾸는 간단한 예제의 함수이다.
void Imm()
{
    HIMC h_imc;
    DWORD conv, sentence;

    h_imc = ImmGetContext(hWnd);
    BOOL ime_flag = ImmGetConversionStatus(h_imc, &conv, &sentence);

    if(ime_flag)
    {
        if(conv & IME_CMODE_NATIVE){                    // 한글
            ...
            conv = IME_CMODE_CHARCODE;
            ImmSetConversionStatus(h_imc, conv, sentence);
            ...           
        }
        else{                                                                // 영어
            ...
conv = IME_CMODE_NATIVE;
            ImmSetConversionStatus(h_imc, conv, sentence);
            ...
        }
        ime_flag = ImmReleaseContext(focus, h_imc);
    }
    else
        ...
}

추가로 참고는 MSDN을 활용하면 될 듯 하다.


'Programmings > Windows Programming' 카테고리의 다른 글

GetLastError()  (0) 2009.07.16
WinIO  (0) 2009.06.23
레지스트리(Registry)  (0) 2009.05.29
다른 윈도우에서의 GetFocus() 사용하기  (0) 2009.05.28
서브클래싱  (0) 2009.05.26