Label及edit学习

 

1. Label

label 是一个标签,用于显示在屏幕上。使用方法如下:

  1. 新建一个传统工程
  2. 在container 的 .h 文件中先定义一个 CEikLable 的类
    Class CEikLable ; 属于 forward 定义
  3. 添加 一个类成员变量 CEikLable* iLabelTest ;
  4. 在container 的 .cpp 文件中添加 include 的引用 #include <eiklabel.h> 
  5. 在 constructL方法中创建该变量,如以下代码所示
    iLabelTest = new (ELeave)CEikLabel;
    iLabelTest->SetContainerWindowL(*this);
    /* 给label 设置字体,可以通过引用eikenv.h ,从而可以通过
    * CEikonEnv::Static() 得到CEikonEnv 对像指针,然后调用
    * 其成员方法,得到一个const 的CFont 指针
    *
    * 其它方法:引用 aknutils.h ,可以得到系统定义的字体
    * 在帮助中搜aknutils 可以查到全局的字体
    * */
    const CFont *aFont = CEikonEnv::Static()->AnnotationFont();
    iLabelTest->SetFont(aFont);
    iLabelTest->SetTextL(_L("label test"));
    iLabelTest->SetUnderlining(ETrue);
    iLabelTest->SetAlignment(EHRightVTop);
     

    这里用到了字体,需要添加用到的头文件:
     
    #include <eikenv.h>
    #include <gdi.h>
    #include <aknutils.h>
    #include <gulalign.h>

    及相应的库文件
    gdi.lib


  1. SizeChanged 方法中要对 CEikLable 做 SetExtent
    iLabelTest->SetExtent(TPoint(50,50),iLabelTest->MinimumSize());
    试着把这个去掉,则不能显示这个标签,这里的作用是用来设置显示的位置及大小
  2. CountComponentControls()  及 ComponentControl(TInt aIndex)
    是分别用来返回该 container 中总的组件数及返回具体某个组件的
    如以下代码:
    // ---------------------------------------------------------
    // CsimplecontrolContainer::CountComponentControls() const
    // ---------------------------------------------------------
    //
    TInt CsimplecontrolContainer::CountComponentControls() const
    {
    return 5; // return nbr of controls inside this container
    }
    // ---------------------------------------------------------
    // CsimplecontrolContainer::ComponentControl(TInt aIndex) const
    // ---------------------------------------------------------
    //
    CCoeControl* CsimplecontrolContainer::ComponentControl(TInt aIndex) const
    {
    switch ( aIndex )
    {
    case 0:
    return iLabel;
    case 1:
    return iToDoLabel;
    case 2:
    return iLabelTest;
    case 3:
    return iDateEditor;
    case 4:  // 这里在调试时写成了 5 ,结果一直出错,原因找了好长时间才找到
    return iEdwin;
    default:
    return NULL;
    }
    }
    // ---------------------------------------------------------
     


  3. 编译运行就可以看到效果了

2. 编辑输入控件

   在练习编辑输入控件是时用的是 CEikDateEditor
   这个需要的头文件是:#include <eikmfne.h> 
   LIB 库文件是:eikctl.lib
   RSS文件定义:
  

RESOURCE DATE_EDITOR r_my_date_edit
{
minDate = DATE
{
year = 1900;
};
maxDate = DATE
{
year = 2100;
};
}


   创建一个 CEikDateEditor 和一个 lable 的区别在 lable 没有放到 rss 中,而 CEikDateEdit 放到 Rss 中了,
下面是创建 CEikDateEditor 的代码

TResourceReader read ;
iCoeEnv->CreateResourceReaderLC(read,R_MY_DATE_EDIT);
iDateEditor = new (ELeave)CEikDateEditor;
iDateEditor->SetContainerWindowL(*this);
iDateEditor->ConstructFromResourceL(read);
CleanupStack::PopAndDestroy();


代码中用到了 TResourceReader ,这个类需要引用头文件:barsread.h  及库文件:bafl.lib

对于 普通的输入控件 CEikEdwin 和 CEikDateEditor 除了 rss 定义不同外,其它的定义及创建是一样的

原文地址:https://www.cnblogs.com/zziss/p/1731883.html