基于控件的传统symbian OS架构之调试小结
2010-05-31 20:07:00 来源:WEB开发网SetExtent()方法设置Label的位置。
开始时,我认为,Label的大小不会改变,所以不需要重写该方法,但事实证明,即使容器中的控件大小不会改变,我们也必须重写这两个方法。如果不,那么这两个Label就不会显示。
TInt CHelloWorldBasicAppView::CountComponentControls() const
{
return 2;
}
返回容器中控件的数目,在这里有两个Label,所以返回2。
void CHelloWorldBasicAppView::Draw(const TRect& aRect) const
{
// Get the standard graphics context
CWindowGc& gc = SystemGc();
// Gets the control's extent
TRect rect = Rect();
// Clears the screen
gc.Clear(rect);
//设置笔刷
gc.SetPenStyle( CGraphicsContext::ENullPen );
gc.SetBrushColor( KRgbRed ); //红色
gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
gc.DrawRect( aRect );
}
将整个窗口的aRect范围,涂成红色。通过一个TRect对象可以设置Draw的区域即:gc.DrawRect( aRect );也就是说,并不一定要绘制整个窗口。
下面看Container的ConstructL方法:
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"));
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();
}
首先,我们给这个容器创建一个窗口,然后分别创建两个Label的实例iLabel和iToDoLabel,这其中用到一个方法
更多精彩
赞助商链接