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 类的主要步骤:

  1. 在 RSS 文件中添加 工程名.hrh 及 工程名.loc 文件如
    #include "XXX.hrh"
    #include "XXX.loc"
  2. 添加上 CEikEdwin 的 引用 #include <eikon.rh>
  3. 添加资源结构定义,如:
    RESOURCE EDWIN r_edwin_Test
    {
     flags = EAknEditorFlagDefault;
     width = qtn_app_edit_width;
     lines = qtn_app_edit_height;
     maxlength = qtn_app_edit_maxLength;
    }
  4. 在 container 类的头文件添加定义
    class CEikEdwin;
    可以参考项目自动生成的代码,都会有前向定义的
  5. 在类中添加类成员声明,声明成一个类指针变量,如:
    CEikEdwin* iEdit;
  6. 在类实现文件中添加
    #include <barsread.h>  // for ResourceReader
    #include <eikedwin.h>  // for CEikEdwin
    #include <EDITCONTROL.RSG>  // 这个 rsg 文件是 rss 文件编译生成的文件,对每个资源赋予一个 id
  7. 在类实现文件中的 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);
  8. 在 draw 方法中去掉那个把背景画成灰的代码,所有的都注释就行了
  9. 找到父类的 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);
      }
     }
    }
  10. 编译运行,就可以看到输入框控件在界面上显示出来了,试着输入,还可以输入

===========================

zziss@原创
qi_jianzhou@126.com

 

 

 

posted @ 2009-12-23 23:56  zziss  阅读(1020)  评论(1编辑  收藏  举报