如何调用Symbian的输入法控件
2007-10-03 12:24
204 查看
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,大家试试吧。
今天就简单的介绍一下输入法控件的调用方法,希望能对大家有用。
我用的输入法控件类是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,大家试试吧。
相关文章推荐
- 如何调用Symbian的输入法控件
- C#多线程如何调用控件
- c#中如何跨线程调用windows窗体控件
- c#如何跨越线程调用窗体上的控件 GOOD
- android如何调用显示和隐藏系统默认的输入法
- symbian中如何检测编辑框的当前输入法类型
- c#中如何跨线程调用windows窗体控件
- 如何在一个窗体中调用另一个窗体的控件或方法
- (转)android如何调用显示和隐藏系统默认的输入法
- 如何截获带文本输入的控件的输入法输入结果 C#
- 如何在PB中调用 Microsoft WEB 浏览器 控件?
- 如何在 ActiveX 控件中调用页面的 Jscript 函数
- 在用户控件中如何调用主页面的事件之事件委托
- 如何跨线程调用Windows窗体控件
- android如何调用显示和隐藏系统默认的输入法
- 动态创建“WEB用户控件(WEB User Control)”又一方法,及如何调用Web用户控件的方法,如何对控件用户控件中的控件
- 如何:对Windows 窗体控件进行线程安全调用
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- 如何:对 Windows 窗体控件进行线程安全调用
- 如何本窗口的COMMAND1中调用另外一个窗口中的某一控件的某一个事件