如何调用Symbian的输入法控件

原创 2007年10月03日 12:24:00
Symbian开发者,经常会需要调用输入法控件,用以提供各种输入操作。许多人都在做输入法的时候遇到了问题,我自己也曾经在输入法上浪费了很多的时间。

今天就简单的介绍一下输入法控件的调用方法,希望能对大家有用。

我用的输入法控件类是CEikEdwin,首先包含系统头文件<eikedwin.h>,然后有一堆的lib库文件需要链接:avkon.lib、eikcoctl.lib、 eikctl.lib、form.lib、uiklaf.lib。这个控件用到的lib比较多,不过根据你使用的功能不同,有些lib似乎可以不用包含。由于我的程序里没有用到比较复杂的功能,只包含了前3个库文件就能正常使用了。

如果库文件,我会看得头晕。。。

接着声明一个控件指针:
CEikEdwin   *m_EditCtrl;

然后在你程序初始化的地方,将控件指针给new出来,同时做一些必要的初始化工作:
m_EditCtrl = new(ELeave) CEikEdwin;                                //把控件给new出来
m_EditCtrl->ConstructL( 0, 10, 20, 1 );                           //设定控件属性,包括样式,宽度,字数限制和行数等
m_EditCtrl->SetContainerWindowL( *m_pCoeCtrl );       //设定报含该控件的容器   
m_EditCtrl->ActivateL();                                                          //激活控件
m_EditCtrl->SetExtent( TPoint( 0, 0 ), TSize( 100, 50 ) );  //设定空间大小,左上角顶点坐标及控件长宽

另外还有最重要的一步,必须将包含该控间的容器加入symbian消息栈。可以在UI的ConstructL里加上:
AddToStackL( m_pCoeCtrl );

这一步非常重要,如果没有这一句,系统就收不到控件消息,你将无法对控件消息进行处理。我曾经就因为这个问题,浪费了整整一天的时间,控件总是没办法接收输入,血的教训啊……

然后在包含该控件指针的容器类(从CCoeControl派生的类)里,重载以下几个函数:
TInt CountComponentControls() const;
CCoeControl* ComponentControl(TInt aIndex) const;
TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);

CountComponentControls接口用于返回控件计数,如果你只有一个控件,那就直接返回1就好了。实现如下:
TInt CMyCoeCtrl::CountComponentControls() const
{
    if( !m_EditCtrl )
    {
        return 0;
    }

    return 1;
}

ComponentControl接口用于返回控件指针,如果你只有一个输入法控件的话,直接返回输入法控件的指针。参数aIndex是控件指针的索引,0代表返回第一个控件。如果你同时有几个控件的话,这个参数就用于指定返回哪个控件指针。
CCoeControl* CMyCoeCtrl::ComponentControl(TInt aIndex) const
{
    if( aIndex == 0 )    //只有一个控件,若非0,则返回NULL
    {
        return m_EditCtrl;
    }
    return NULL;       
}

OfferKeyEventL是控件消息处理接口,可以在此处理各种键盘消息。
TKeyResponse CMyCoeCtrl::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
{
    if( m_EditCtrl && m_EditCtrl->IsFocused() )        //若当前控件获得焦点,处理按键
    {
        return EKeyWasConsumed;
    }

    return EKeyWasNotConsumed;
}


这样,输入法控件的初始化和设置就完成了,要使用控件前必须将其激活,调用如下接口:
m_EditCtrl->SetFocus(TRUE);

一旦激活后,输入法就可以使用了。

OK,大家试试吧。


 
 

iOS 调用系统相机、输入法等系统控件显示中文标题

1,问题描述 有时我们使用 Cordova 编译打包 iOS 应用后会发现,界面上有些地方文字显示的是英文,比如键盘顶部默认显示的文字: 或者使用了camera 插件(cordova-plug...

Android没有输入焦点类控件的输入法调用

http://blog.csdn.net/veyan1314/article/details/6399485 在Android系统上,切换到有输入焦点的控件时会自动弹出键盘,如TextView,...

特立独行的在输入法弹起的时候将指定控件往上推

最近,测试妹子在测试登录的时候发现下面的按钮被输入法挡住了,提出这个体验不好,看不到下面的按钮不行,所以让我们在输入法弹出的时候,将用户名和密码的输入框往上挪一挪。     这个是成品。   ...

QT输入法控件

  • 2016年09月10日 11:07
  • 4.53MB
  • 下载

VB输入法注入DLL控件(过游戏保护)

  • 2013年11月20日 22:48
  • 750KB
  • 下载

聊天工具输入法控件

星期六日闲来无事,看到之前写的一个聊天IM程序,在这个程序的聊天界面有一个自定义的输入法控件,效果还是挺不错,可以随意切换表情、语音输入、软键盘文本输入和其他功能选择,类似于微信控件。表情框架使用了L...

Android学习笔记——解决设置了android:layout_alignParentBottom="true"的控件会被弹出的输入法顶上去的问题

写在前面:在项目开发当中有时会碰到许多奇奇怪怪的问题,这次是碰上了弹出输入法对界面造成影响的问题。一、出现问题 先来看看出现问题的场景: 这个界面整体是由若干个EditText输入框和两...

android中控件焦点问题和输入法的显示与隐藏

一、焦点问题   开发中常遇到的问题,特别是列表类控件,
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何调用Symbian的输入法控件
举报原因:
原因补充:

(最多只允许输入30个字)