WEB开发网
开发学院手机开发Symbian 开发 基于控件的传统symbian OS架构之调试小结 阅读

基于控件的传统symbian OS架构之调试小结

 2010-05-31 20:07:00 来源:WEB开发网   
核心提示:AddToStackL(iAppView);将容器放到栈顶,从而可以接收用户的事件,基于控件的传统symbian OS架构之调试小结(4),如果想让其他容器接收事件的话,就可以通过另一个方法,但却发现并不能实现,因此,RemoveFromStatck(iAppView)将当前容器从栈顶移出,然后在将其他容器移入该栈顶即

AddToStackL(iAppView);将容器放到栈顶,从而可以接收用户的事件,如果想让其他容器接收事件的话,就可以通过另一个方法,RemoveFromStatck(iAppView)将当前容器从栈顶移出,然后在将其他容器移入该栈顶即:AddToStackL(iAppView2);

CHelloWorldBasicAppUi::~CHelloWorldBasicAppUi()

{

if (iAppView)

{

iEikonEnv->RemoveFromStack(iAppView);

delete iAppView;//调用容器Container的析构函数,销毁容器对象即iAppView

iAppView = NULL;//注意,一定要将指针置空,否则就会称为悬空指针,也就是野指针。

}

}

在析构函数中销毁创建的容器实例。

需要注意:容器实例iAppView必须是UI类的私有成员,即:

private:

CHelloWorldBasicAppView* iAppView;

小结:这里面出现几个概念,比如屏幕、窗口、容器、复合控件等,比较容易让人混淆。我的理解是这样子的:屏幕就只有一个,也就是手机的显示屏,是一个物理概念;而窗口是逻辑上的概念,一个程序里我们可以创建多个窗口,下面的一个例子我就来说明这个问题;容器和复合控件都是继承自控件基类CCoeControl,并且它们的类定义中都有子控件成员,不同之处就是容器拥有自己的窗口,而复合控件没有,我们可以把复合控件加到其他的复合控件或容器上,我也会在下面的例子里加以实现。

二、屏幕上面切换显示两个窗口

每个窗口都有两个Label。

最开始,我是想这样来实现:让第一个iAppView创建一个窗口,而第二个iAppView2(实际上就是一个复合控件)不再创建新的,而是共用 iAppView创建的窗口。试验的时候,在UI的ConstructL()方法里,先创建iAppView,在将拥有窗口的容器iAppView作为参数传递到iAppView2的构造函数中,但却发现并不能实现。

因此,我只能也给iAppView2也创建一个窗口,看这两个容器类的构造函数如下:

void CHelloWorldBasicAppView::ConstructL(const TRect& aRect)

{

// Create a window for this application view

CreateWindowL();//复合控件创建窗口

iLabel=new(ELeave) CEikLabel;

iLabel->SetContainerWindowL(*this);//将不拥有窗口的控件和窗口关联

iLabel->SetTextL(_L("iLabel"));

上一页  1 2 3 4 5 6 7 8  下一页

Tags:基于 控件 传统

编辑录入:coldstar [复制链接] [打 印]
赞助商链接