Symbian开发——编辑框(CEikEdwin)

来源:互联网 发布:中国碳交易 数据 编辑:程序博客网 时间:2024/04/30 13:12

S60中的编辑框控件有很多种(普通编辑框、全局文本、IP地址、日期等等),这里只介绍普通编辑框——CEikEdwin。

 

一、创建编辑框

创建编辑框有两种方法:

1. 通过资源创建

1)资源定义

 

RESOURCE EDWIN r_example_editor

{

flags = EEikEdwinWidthInPixels;// 以像素为单位

width = 240;// 控件宽度

lines = 2;// 行数

maxlength = 1024;// 文本最大长度

}

2)生成代码
    TResourceReader reader;
    iCoeEnv->CreateResourceReaderLC( reader, R_EXAMPLE_EDITOR );
    iEditor = new ( ELeave ) CEikEdwin;
    iEditor->SetContainerWindowL( *this );
    iEditor->ConstructFromResourceL( reader );
    CleanupStack::PopAndDestroy();  // Resource reader
    // 之后就可以对iEditor对象进行操作。比如SetFocus,SetExtent等。
2. 通过代码创建
代码如下:
iEditor = new (ELeave) CEikEdwin;
iEditor->SetContainerWindowL(*this );
iEditor->ConstructL(EEikEdwinWidthInPixels, 240, 1024, 2);
// 之后可以对iEditor对象进行操作
// iEditor->SetFocus( ETrue );
二、更新编辑框文本
不能使用向CEikLabel的SetText函数,编辑框的文本是有CPlainText类来编辑的。例如
_LIT( KLabelRecvData, "Display recv data." );
CPlainText *text = iEdwinRecvData->Text();
text->InsertL( 0, KLabelRecvData );
更多的操作,比如删除,追加文本利用SDK中的API都可以实现。也可参考Nokia论坛:http://wiki.forum.nokia.com/index.php/Using_CEikEdwin_Text_Editor
三、可能遇到的问题
在最开始使用编辑框时,你可能会遇到下面问题:
1)不响应键盘输入
在OfferKeyEventL函数中调用CEikEdwin的OfferKeyEventL函数。比如:
TKeyResponse CEditControlAppViewContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,
TEventCode aType)
{
return iEditor->OfferKeyEventL( aKeyEvent, aType );
}
2)调用了OfferKeyEventL函数仍然不响应键盘输入
一般都是在复合控件中使用编辑框,那么复合控件一定在一个View中。
我最开始遇到的问题是:S60 3rd新建的UI Application程序框架中,包含×××AppUi类和×××AppView两个类。实际上AppView继承的是CCoeControl类。我在这个类中添加一个编辑框,程序运行后,编辑框不响应键盘输入。
解决方法:我将×××AppView改成×××AppViewContainer类,然后创建一个继承与CAknView的×××AppView类,这样一个View对应一个Container,这样在Container中的编辑框可以正常响应键盘输入了。