这里的控制就是指屏幕的一个区域,来相应用户的输入事件.开发者的控制设计可以起源于CCoeControl,Avkon也提供了很多可供使用的接口库.
拥有窗口的控制和无窗口的控制 拥有窗口的控制是最顶层的控制,他控制着整个屏幕区域,而且他还包含了其他的控制.创建一个拥有窗口的控制:
以下内容为程序代码:
CMyControl::ConstructL()
{
CreateWindowL(); // This makes the control window-
// owning
SetRectL(ClientRect()); // This sets the controls size
ActivateL(); // This must be called before the control
// can be drawn
}
| | 无窗口的控制应该被包含在拥有窗口的控制里面,与其相比,无窗口控制有速度快,对资源需求少的特点.在无窗口控制建立的时候,需要建立他的容器窗口.建立一个无窗口的控制:
以下内容为程序代码:
CMyControl::ConstructL(CCoeControl* aParentControl { SetContainerWindowL(aParentControl); }
| | 成群的控制可以在应用程序内部设置和重用其他控制.复合控制为控制提供了信息,他包含了两个虚函数:CountComponentControls()-用来返回组成的控制的数量,ComponentControl(TInt aIndex)-以索引的形式返回每一个控制.
控制栈为控制获得事件钥匙(包括导航钥匙),创建了一个列表.通常只有一个View可以把自己压入控制栈,然后通过调用OfferKeyEventL()方法,分发事件钥匙,分发给他的控制.添加控制到控制栈:
以下内容为程序代码:
void CTestAAppUi::ConstructL()
{
BaseConstructL();
iAppDialog = new (ELeave) CTestADialog;
iAppDialog->SetMopParent(this);
iAppDialog->ExecuteLD( R_TESTA_DIALOG [img]/images/wink.gif[/img];
AddToStackL( iAppDialog [img]/images/wink.gif[/img];
}
| | 当最后一个控制被添加进来以后,首先分配给他事件钥匙.当控制处于非活动状态的时候,将自动返回EKeyWasNotConsumed,事件钥匙也随即被分给下一个控制栈中的项
通常情况下,在建立一个自定义控制的时候,也创建一个资源结构,因此,控制可以在资源文件中定义.资源结构通常在资源头(.rh)文件中被定义,
今天发了东北大学的学位证和毕业证,开心.想了一天的MVC,一点头绪也没有,困难啊,明天接着想.
|