CEikEdWin 类的使用
CEikEdWin 类的使用
CEikEdWin 是一个编辑框类,如同 edit,textbox ,这个类对应的 RESOURCE STRUCT 名为
EDWIN
把这个控件结构添加到资源文件中为
RESOURCE EDWIN r_edwin_test
{
flags = EAknEditorFlagDefault;
width = qtn_app_edit_width;
lines = qtn_app_edit_height;
maxlength = qtn_app_edit_maxLength;
}
其中 qtn_app_edit_width/height/maxLength 是定义在 loc 文件中的
如:
#define qtn_app_edit_width 50
#define qtn_app_edit_height 1
#define qtn_app_edit_maxLength 20
但是 EAknEditorFlagDefault 没有找到在哪里定义,应该是默认设置
关于类在资源中的结构可以通过 Developer Library » API Reference » C++ API reference » Uikon Resources 找到各个类的资源
结构定义
在 rss 文件中要引用 hrh 及 loc 文件
在代码文件中要引入
工程名.rsg 文件
下面是添加一个 CEikEdwin 类的主要步骤:
- 在 RSS 文件中添加 工程名.hrh 及 工程名.loc 文件如
#include "XXX.hrh"
#include "XXX.loc" - 添加上 CEikEdwin 的 引用 #include <eikon.rh>
- 添加资源结构定义,如:
RESOURCE EDWIN r_edwin_Test
{
flags = EAknEditorFlagDefault;
width = qtn_app_edit_width;
lines = qtn_app_edit_height;
maxlength = qtn_app_edit_maxLength;
} - 在 container 类的头文件添加定义
class CEikEdwin;
可以参考项目自动生成的代码,都会有前向定义的 - 在类中添加类成员声明,声明成一个类指针变量,如:
CEikEdwin* iEdit; - 在类实现文件中添加
#include <barsread.h> // for ResourceReader
#include <eikedwin.h> // for CEikEdwin
#include <EDITCONTROL.RSG> // 这个 rsg 文件是 rss 文件编译生成的文件,对每个资源赋予一个 id - 在类实现文件中的 ConstructL 方法中添加以下代码
TResourceReader aRead ;
iCoeEnv->CreateResourceReaderLC(aRead,R_EDWIN_TEST);
iEdit = new (ELeave) CEikEdwin();
iEdit->SetContainerWindowL(*this);
iEdit->ConstructFromResourceL(aRead);
iEdit->SetBackgroundColorL(KRgbRed);
//iEdit->SetTextL( _L("Add Your controls\n here"));
CleanupStack::PopAndDestroy();
iEdit->SetExtent(EDWIN_POS,iEdit->MinimumSize()); // 这句是指定位置的 edwin_pos 是 在头文件中定义的 #define EDWIN_POS TPoint( 10, 25 )
iEdit->SetFocus(ETrue); - 在 draw 方法中去掉那个把背景画成灰的代码,所有的都注释就行了
- 找到父类的 TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); 虚拟方法,添加到 private 中
实现代码为:
TKeyResponse CeditTestContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent,TEventCode aType )
{
if (iEdit)
{
if(iEdit->IsFocused())
{
return iEdit->OfferKeyEventL(aKeyEvent,aType);
}
}
} - 编译运行,就可以看到输入框控件在界面上显示出来了,试着输入,还可以输入
===========================
zziss@原创
qi_jianzhou@126.com