首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Symbian >

得到输入法状态有关问题!

2012-01-26 
得到输入法状态问题! 求助! 我在做一个全屏程序,要得到Editor输入法状态,再自己显示出来。我在csdn查到别人

得到输入法状态问题! 求助!

我在做一个全屏程序,要得到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;

热点排行