基于控件的传统symbian OS架构之调试小结
2010-05-31 20:07:00 来源:WEB开发网通过看这个函数原型就知道了没有必要非要传递一个Rwindow实例,我们也可以传递一个拥有窗口的容器,而在这里容器Container就是一个拥有窗口的CCoeControl实例,因为我们调用了方法CreateWindowL();
然后设置我们创建的窗口的显示范围SetRect(aRect);,一般是全屏,当然我们也可以设置一个TRect实例,比如:TRect(TPoint(0,0),TSize(100,100)),但是这种情况下,就会看到,我们程序的窗口没有占满整个屏幕,也就是说,仅有TRect(TPoint(0,0),TSize(100,100))的区域来显示我们的程序,而屏幕上剩余的范围还会显示原来的,这样子就比较奇怪,比较难看了。
最后激活窗口ActivateL();也就是说调用容器的Draw()、SizeChanged()等函数,从而开始绘制窗口。
最后就是容器Container类的析构函数:
CHelloWorldBasicAppView::~CHelloWorldBasicAppView( )
{
if(iLabel)
{
delete iLabel;
iLabel=NULL;
}
if(iToDoLabel)
{
delete iToDoLabel;
iToDoLabel=NULL;
}
}
这个析构函数的主要作用是销毁我们容器中创建的两个Label实例iLabel和iToDoLabel。
(2)看UI的内容
其实主要就是UI的ConstructL()方法和析构函数,之所以有析构函数,因为实际上UI也是一个C类。
void CHelloWorldBasicAppUi::ConstructL()
{
BaseConstructL();
iAppView = CHelloWorldBasicAppView::NewL(ClientRect());
iAppView->SetMopParent( this );
AddToStackL(iAppView);
}
首先创建UI的框架即调用方法BaseConstructL();,然后创建容器Container实例,实际上就是这里的iAppView。
接下来的的SetMopParent( this );和AddToStackL(iAppView);在本例中并不是必须的:
SetMopParent( this );是为了设置父控件用的。据网友pan讲:通过这个方法可以设置控件之间的父子关系,然后在子控件中就可以访问父控件或其他子控件,父控件中也可以访问子控件。需要注意的就是要讲这个方法和SetContainerWindowL()区分开。
更多精彩
赞助商链接