您的位置:首页 > 其它

切换输入法半角全角(打开关闭输入法)

2010-01-29 17:25 603 查看
 #include   "winuser.h"  

  #include   "imm.h"  

  #pragma   comment(lib,"imm32")  

   

  HKL   hKL[2];  

  HKL   hCurKL;  

   

  hCurKL=GetKeyboardLayout(0);       //保存初始输入法  

  GetKeyboardLayoutList(2,hKL);     //获取输入法列表,只获取两项  

   

  void   CIMESampleDlg::OnSetfocusEdit1()    

  {  

  //   TODO:   Add   your   control   notification   handler   code   here  

  if(hCurKL==hKL[0])     hCurKL=hKL[1];     //选择第一种输入法  

          ActivateKeyboardLayout(hCurKL,KLF_SUBSTITUTE_OK);       //切换输入法  

   

  HIMC   hIMC;  

  DWORD   dwConv,   dwSent;  

  hIMC=ImmGetContext(m_hWnd);  

  ImmGetConversionStatus(hIMC,&dwConv,&dwSent);  

   

  if((dwConv   &   IME_CMODE_LANGUAGE)   !=   IME_CMODE_NATIVE)  

  {  

  dwConv   &=   ~IME_CMODE_LANGUAGE;  

  dwConv   |=   IME_CMODE_NATIVE;           //中文输入状态  

  }

  //标注1

  if   (!(dwConv   &   IME_CMODE_FULLSHAPE))     dwConv   |=   IME_CMODE_FULLSHAPE;     //全角  

  if   (!(dwConv   &   IME_CMODE_SYMBOL))           dwConv   |=   IME_CMODE_SYMBOL;           //中文标点  

  //标注2

  //若要切换输入法为半角,只需把上面的标注1判断改为如下即可(自己用到时有此要求,所以在原作者继承上自己改了下)

  if (dwConv & IME_CMODE_FULLSHAPE)

         dwConv &= ~IME_CMODE_FULLSHAPE;

  if (dwConv & IME_CMODE_SYMBOL)

         dwConv &= ~IME_CMODE_SYMBOL;

 

  ImmSetConversionStatus(hIMC,dwConv,dwSent);  

  ImmReleaseContext(m_hWnd,hIMC);  

  }  

   

  void   CIMESampleDlg::OnKillfocusEdit1()    

  {  

  //   TODO:   Add   your   control   notification   handler   code   here  

  hCurKL=GetKeyboardLayout(0);               //保存现有的输入法  

  ActivateKeyboardLayout(hKL[0],KLF_SUBSTITUTE_OK);         //关闭输入法  

  }  

 

文章转自: http://topic.csdn.net/t/20030926/14/2303213.html

 

 

---(下面是自己添加的)------------------------------------------------------------------------------------

 

同样对于日文输入法而言,可以通过上面的方法进行全半角切换,不过还有个前提:上面的方法需要打开IME才行,因为在“直接入力”(Direct Input)状态上面的方法不能切换全半角等状态,如果需要由“直接入力”(Direct Input)切换到其他如"ひらがな"等状态,需要通过::ImmSetOpenStatus(hImc, TRUE);打开IME,同样如果想由其他状态切换到“直接入力”(Direct Input),只需::ImmSetOpenStatus(hImc, FALSE);即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  输入法 input include