织梦CMS - 轻松建站从此开始!

罗索

Symbian的调用输入法控件CEikEdwin

jackyhwei 发布于 2010-08-11 20:45 点击:次 
Symbian开发者,经常会需要调用输入法控件,用以提供各种输入操作。许多人都在做输入法的时候遇到了问题,我自己也曾经在输入法上浪费了很多的时间。
TAG:

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

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

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

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

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

然后在你程序初始化的地方,将控件指针给new出来,同时做一些必要的初始化工作:

  1. m_EditCtrl = new(ELeave) CEikEdwin; //把控件给new出来
  2. m_EditCtrl->ConstructL( 0, 10, 20, 1 );
  3. //设定控件属性,包括样式,宽度,字数限制和行数等 
  4. m_EditCtrl->SetContainerWindowL( *m_pCoeCtrl );//设定报含该控件的容器
  5. m_EditCtrl->ActivateL();//激活控件
  6. m_EditCtrl->SetExtent( TPoint( 0, 0 ), TSize( 100, 50 ) );
  7. //设定空间大小,左上角顶点坐标及控件长宽 

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

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

然后在包含该控件指针的容器类(从CCoeControl派生的类)里,重载以下几个函数:

  1. TInt CountComponentControls() const
  2. CCoeControl* ComponentControl(TInt aIndex) const
  3. TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); 
  4.  
  5. //CountComponentControls接口用于返回控件计数,
  6. //如果你只有一个控件,那就直接返回1就好了。实现如下: 
  7. TInt CMyCoeCtrl::CountComponentControls() const 
  8.     if( !m_EditCtrl ) 
  9.     { 
  10.         return 0; 
  11.     } 
  12.  
  13.     return 1; 

ComponentControl接口用于返回控件指针,如果你只有一个输入法控件的话,直接返回输入法控件的指针。参数aIndex是控件指针的索引,0代表返回第一个控件。如果你同时有几个控件的话,这个参数就用于指定返回哪个控件指针。

(zj41342626)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201008/9959.html]
本文出处:百度博客 作者:zj41342626
顶一下
(0)
0%
踩一下
(3)
100%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容