首 页 | 新 闻 | Symbian | Windows Mobile| J2ME | 下载中心 | 游戏策划 | 购书指南 | 移动开发视频教程
您现在的位置: 开发视界 >> 专家专栏 >> 剑走偏锋 >> 文章正文
控制与复合控制
作者:剑走偏锋    文章来源:本站原创    更新时间:2005-8-9 15:42:10
    这里的控制就是指屏幕的一个区域,来相应用户的输入事件.开发者的控制设计可以起源于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,一点头绪也没有,困难啊,明天接着想.
相关文章:
Symbian屏幕双缓冲&&DSA
Symbian sdk帮助-术语表D
Symbian sdk帮助-术语表O
Symbian sdk帮助-术语表W
手机游戏策划模板
上海同行业内聚会感想
Graphics(2)
Graphics(8)