基于控件的传统symbian OS架构之调试小结
2010-05-31 20:07:00 来源:WEB开发网之前写过一个关于symbian常用程序架构的帖子,不过当时是在简单的看了看书本的条件下写的,仅仅是当时做的一个笔记而已,并没有多少自己的感想体会在里面。当然现在也不能就对传统的symbian os架构很了解了,因为毕竟没有做太多深入的研究试验,仅仅是根据自己的想法做了几个小程序而已。
从四个小程序上来分析:
一、在屏幕上显示两个Label
这是最最基本的了。
关键的就是创建一个容器Container(实际上就是一个拥有窗口的复合控件而已)和一个UI其中Container继承自控件基类 CCoeControl,而UI继承自CAknAppUi,这都是必须的。另外,如果Container里的控件,比如编辑框想接收用户事件的话,那么 Container同时还要继承?????????因为我的容器里面只有两个Label,所以也就不需要继承这个类了。
(1)先看容器类Container的内容:
因为容器Container里包含两个Label,一定要注意,将两个Label 的指针设为Container类的私有成员变量即:
private:
CEikLabel* iLabel;
CEikLabel* iToDoLabel;
当然这是在Container类的头文件里声明的。
然后就是看Container的四个方法,这四个都需要我们重写,否则容器中的两个Label控件不会显示。它们分别是:
void Draw(const TRect& aRect) const;
virtual CCoeControl* ComponentControl(TInt aIndex) const;
virtual TInt CountComponentControls() const;
void SizeChanged();
在本例中,我是这样重写这四个方法的:
CCoeControl* CHelloWorldBasicAppView::ComponentControl(TInt aIndex) const
{
switch(aIndex)
{
case 0:
return iLabel;
case 1:
return iToDoLabel;
default:
return NULL;
}
}
获取容器中每个控件的指针。
void CHelloWorldBasicAppView::SizeChanged()
{
//设置标签的位置
iLabel->SetExtent( TPoint(10,10), iLabel->MinimumSize() );
iToDoLabel->SetExtent( TPoint(10,100), iToDoLabel->MinimumSize() );
}
赞助商链接