Programming/Win32API

IME 영문만 입력가능하게 하기

blueasa 2010. 9. 3. 15:09

출처 : GPG스터디 http://www.gpgstudy.com/forum/viewtopic.php?t=8137&highlight=ime+%C7%D1%B1%DB

 

윈도우 메시지 프로시저로 IME의 컨버전 모드가 변경 되었을 경우 아래와 같이 메시지가 옵니다.

코드:
  if (WM_IME_NOTIFY == Message)
  {
    switch (wParam)
    {
    case IMN_SETCONVERSIONMODE:
      {
        //한영키가 눌렸는가 검사
        HIMC hIMC = NULL;  

        if (hIMC = ImmGetContext(this->GetWindowHandle()))  
        {  
          DWORD fdwConversion, fdwSentence;  

          BOOL bRet = ImmGetConversionStatus(hIMC, &fdwConversion, &fdwSentence);  

          if(bRet) 
          {  
            bRet = (fdwConversion & IME_CMODE_NATIVE ? TRUE : FALSE);  

            if (bRet)
            {
              //한글 모드임!
            }
            else
            {
              //영문 모드임!
            }
          }

          ImmReleaseContext(this->GetWindowHandle(), hIMC);
        }  

      }
    
    }


이렇게 알아 낸 후 컨버전 모드를 변경하고 싶다면 아래와 같이 하면 됩니다

코드:
//영문으로 변경하고 싶다면..
DWORD dwMode = IME_CMODE_ALPHANUMERIC;

//한글로 변경하고 싶다면..
DWORD dwMode = IME_CMODE_NATIVE;

ImmSetConversionStatus(hImc, dwMode, NULL);


대략 무조건 영문으로 고정을 시키시고 싶으신듯 하니.. 아래와 같이 간편화가 될듯 합니다.

코드:
if (WM_IME_NOTIFY == Message)
  {
    switch (wParam)
    {
    case IMN_SETCONVERSIONMODE:
      {
        //한영키가 눌렸는가 검사
        HIMC hIMC = NULL;  

        if (hIMC = ImmGetContext(this->GetWindowHandle()))  
        {  
           ImmSetConversionStatus(hImc, IME_CMODE_ALPHANUMERIC, NULL);
        }

          ImmReleaseContext(this->GetWindowHandle(), hIMC);
        }  

      }
    
    }
반응형