11 个解决方案
#1
在VB里好象改一个属性就可以了,在VC里不知道,有时间研究研究。
#2
关注这个问题。
#3
大家关注
#4
昨天对该问题进行了初步研究,MSDN上有关于输入法控制函数的说明,但在使用上仅提供了一个SDK的例子,我现在能够实现中英文以及全半角的转换,但无法在EDIT获的焦点时调出输入法,需要手动调出。这些函数包含在imm.h中,链接库为imm32.lib,可以通过关键字IME在MSDN中查找相关信息,IME---Input Method Edit.
不知VB中是怎么做的,只需要设置一下textbox的IMEMode属性即可实现打开输入法。在VC中用MSDN上的函数打开输入法,好象不起作用,MSDN的例子好象也没有做到。
不知VB中是怎么做的,只需要设置一下textbox的IMEMode属性即可实现打开输入法。在VC中用MSDN上的函数打开输入法,好象不起作用,MSDN的例子好象也没有做到。
#5
所有问题已经解决,但怎不见楼主踪影?
但愿我花了一整天苦心研究的结果没有白费。现在挑选相关代码贴出来。
#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; //中文输入状态
}
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); //关闭输入法
}
但愿我花了一整天苦心研究的结果没有白费。现在挑选相关代码贴出来。
#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; //中文输入状态
}
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); //关闭输入法
}
#6
哈哈
#7
不错
#8
to scie() :
楼主不在,我给你加分~
楼主不在,我给你加分~
#9
搂主失踪了!
#10
在这种情况下,你必须的自己手动才有可能会切换过来的,因为没有遇到过这样的情况,所以也不是很清楚的,因为不是什么高手,所以有关这方面的程序也没有过多的时间去看,你有没有手动去试一下呢?
希望你试一下,兴许它就是手动的.好运!!!
希望你试一下,兴许它就是手动的.好运!!!
#11
俺就不明白了,有些人回复之前怎么不看看前面的帖子就在这里大放厥词呢?
#1
在VB里好象改一个属性就可以了,在VC里不知道,有时间研究研究。
#2
关注这个问题。
#3
大家关注
#4
昨天对该问题进行了初步研究,MSDN上有关于输入法控制函数的说明,但在使用上仅提供了一个SDK的例子,我现在能够实现中英文以及全半角的转换,但无法在EDIT获的焦点时调出输入法,需要手动调出。这些函数包含在imm.h中,链接库为imm32.lib,可以通过关键字IME在MSDN中查找相关信息,IME---Input Method Edit.
不知VB中是怎么做的,只需要设置一下textbox的IMEMode属性即可实现打开输入法。在VC中用MSDN上的函数打开输入法,好象不起作用,MSDN的例子好象也没有做到。
不知VB中是怎么做的,只需要设置一下textbox的IMEMode属性即可实现打开输入法。在VC中用MSDN上的函数打开输入法,好象不起作用,MSDN的例子好象也没有做到。
#5
所有问题已经解决,但怎不见楼主踪影?
但愿我花了一整天苦心研究的结果没有白费。现在挑选相关代码贴出来。
#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; //中文输入状态
}
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); //关闭输入法
}
但愿我花了一整天苦心研究的结果没有白费。现在挑选相关代码贴出来。
#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; //中文输入状态
}
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); //关闭输入法
}
#6
哈哈
#7
不错
#8
to scie() :
楼主不在,我给你加分~
楼主不在,我给你加分~
#9
搂主失踪了!
#10
在这种情况下,你必须的自己手动才有可能会切换过来的,因为没有遇到过这样的情况,所以也不是很清楚的,因为不是什么高手,所以有关这方面的程序也没有过多的时间去看,你有没有手动去试一下呢?
希望你试一下,兴许它就是手动的.好运!!!
希望你试一下,兴许它就是手动的.好运!!!
#11
俺就不明白了,有些人回复之前怎么不看看前面的帖子就在这里大放厥词呢?