切换输入法半角全角(打开关闭输入法)
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);即可
#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);即可
相关文章推荐
- 输入法中全角和半角的区别
- 打开和关闭输入法的实现
- Android输入法界面管理(打开/关闭/状态获取)
- Android输入法的关闭打开
- Centos下输入法全角半角转换
- activity打开时弹出或关闭输入法控制
- 控件获取焦点及设置输入法全角半角或无效
- Android打开和关闭输入法
- Android程序打开和对输入法的操作(打开/关闭)
- android 打开和关闭输入法
- Js 禁用输入法 ime-mode 全角转换成半角
- 如何切换中英文输入法及全角/半角?(原创)
- Android输入法界面管理(打开/关闭/状态获取)
- 安卓监听输入法键盘打开关闭(兼容虚拟按键栏的手机,比如华为)
- 用Android程序打开和关闭输入法
- c# 输入法全角/半角切换问题
- 打开关闭输入法
- Android程序打开和关闭输入法,this.getCurrentFocus()有时为空,加try catch
- 解决VS2005中文输入法半角/全角的补丁
- js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口