基于控件的传统symbian OS架构之调试小结
2010-05-31 20:07:00 来源:WEB开发网iLabel->SetUnderlining(ETrue);
iToDoLabel=new(ELeave) CEikLabel;
iToDoLabel->SetContainerWindowL(*this);
iToDoLabel->SetTextL(_L("iToDoLabel"));
// Set the windows size
SetRect(aRect);
// Activate the window, which makes it ready to be drawn
ActivateL();
}
void CHelloWorldBasicAppView2::ConstructL(const TRect& aRect,CHelloWorldBasicAppView* iAppView)
{
// Create a window for this application view
CreateWindowL();//复合控件创建窗口
iLabel2=new(ELeave) CEikLabel;
iLabel2->SetContainerWindowL(*iAppView);//将不拥有窗口的控件和窗口关联
iLabel2->SetTextL(_L("iLabel2"));
iLabel2->SetUnderlining(ETrue);
iToDoLabel2=new(ELeave) CEikLabel;
iToDoLabel2->SetContainerWindowL(*iAppView);
iToDoLabel2->SetTextL(_L("iToDoLabel2"));
// Set the windows size
SetRect(aRect);
// Activate the window, which makes it ready to be drawn
ActivateL();
}
通过对照发现,两个构造函数中都创建了窗口,并进行了激活。注意就是它们的窗口范围都是整个屏幕。
现在的问题是:如何轮换显示两个窗口呢?
可以通过方法:iAppView->MakeVisible( EFalse );或iAppView->MakeVisible( ETrue );来实现窗口的是否显示,来在一个屏幕上切换显示两个范围都是占满个屏幕的窗口。
即看UI的构造函数:
void CHelloWorldBasicAppUi::ConstructL()
{
BaseConstructL();
iAppView = CHelloWorldBasicAppView::NewL(ClientRect());
iAppView->MakeVisible( EFalse );//暂时不显示容器iAppView
iAppView2 = CHelloWorldBasicAppView2::NewL(ClientRect());
}
三、在一个屏幕上同时显示两个窗口
在设定窗口的范围上,iAppView占屏幕的上半部分,而iAppView2占屏幕的下半部分。其他的和上面一样,当然也就不需要MakeVisible()这个方法了,呵呵。
更多精彩
赞助商链接