天天看点

Symbian开发——编辑框(CEikEdwin)

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中的编辑框可以正常响应键盘输入了。

继续阅读