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

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

 2010-05-31 20:07:00 来源:WEB开发网   
核心提示:SetExtent()方法设置Label的位置,开始时,基于控件的传统symbian OS架构之调试小结(2),我认为,Label的大小不会改变,下面看Container的ConstructL方法:void CHelloWorldBasicAppView::ConstructL(const TRect& aRect){

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,这其中用到一个方法

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

Tags:基于 控件 传统

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