得到输入法状态问题! 求助!
我在做一个全屏程序,要得到Editor输入法状态,再自己显示出来。
我在csdn查到别人询问输入法的问题,子腾兄的回答是
TCoeInputCapabilities icap = edwin-> InputCapabilities();
CAknEdwinState* edwinState = static_cast <CAknEdwinState*> (icap.FepAwareTextEditor()-> Extension1()-> State(KNullUid));
TInt inputMode = edwinState-> CurrentInputMode();
我用您的这段代码试了一下,发现可以得到当前输入法状态。
但是 Abc 与 abc 这两个的mode都是1 ,这一点还是无法区分阿。
我看了一下CAknEdwinState类,有一个CurrentCase()函数。
TInt curruntcase = edwinState-> CurrentCase();
但这个函数返回的case只是在用笔形键切换大小写的时候才改变。
对于用#号键在Abc与abc之前切换的情况,依旧是不起作用。
我想请教一下,是否有什么方法能得知当前是Abc还是abc么?
或者是否有什么“曲线救国”的办法。
我查了许久SDK和相关文档,还是没有找到,很困惑。
请大家务必帮忙啊!
子腾兄,我给你发信了!
万分感谢!
[解决办法]
最好使用MAknEditingStateIndicator获取输入法状态。在KeyUp和KeyDown后,获取输入法状态。代码如下:
MAknEditingStateIndicator * ei = CAknEnv::Static()-> EditingStateIndicator() ;
if (!ei) return EUnknown;
CAknIndicatorContainer *ic = ei-> IndicatorContainer();
if (!ic) return EUnknown;
if(ic-> IndicatorState(S_uid(EAknNaviPaneEditorIndicatorPinyin) ))
{
//to do ... if input method = T9 (即拼音和笔画)
}
if(ic-> IndicatorState(S_uid(EAknNaviPaneEditorIndicatorStroke) ))
{
//to do ... if input method = T9 (即拼音和笔画)
}
else if(ic-> IndicatorState(S_uid(EAknNaviPaneEditorIndicatorLowerCase)))
{
//to do ... if input method = "abc ";
}
else if(ic-> IndicatorState(S_uid(EAknNaviPaneEditorIndicatorUpperCase)))
{
//to do ... if input method = "ABC ";
}
else if(ic-> IndicatorState(S_uid(EAknNaviPaneEditorIndicatorTextCase)))
{
//to do ... if input method = "Abc ";
}
else if(ic-> IndicatorState(S_uid(EAknNaviPaneEditorIndicatorNumberCase)))
{
//to do ... if input method = "123 ";
}
return EUnknown;