1. Label
label 是一个标签,用于显示在屏幕上。使用方法如下:
- 新建一个传统工程
- 在container 的 .h 文件中先定义一个 CEikLable 的类
Class CEikLable ; 属于 forward 定义 - 添加 一个类成员变量 CEikLable* iLabelTest ;
- 在container 的 .cpp 文件中添加 include 的引用 #include <eiklabel.h>
- 在 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
- 在SizeChanged 方法中要对 CEikLable 做 SetExtent
iLabelTest->SetExtent(TPoint(50,50),iLabelTest->MinimumSize());
试着把这个去掉,则不能显示这个标签,这里的作用是用来设置显示的位置及大小 - 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;}}// --------------------------------------------------------- - 编译运行就可以看到效果了
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 定义不同外,其它的定义及创建是一样的