当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]自从开始接触Symbian,就觉得Symbian的UI编程非常困难。难在哪呢?因为不知道Symbian控件的运行机制,所以在编程过程中常会出现一些莫名其妙的错误,让人摸不着头脑。也许有

自从开始接触Symbian,就觉得Symbian的UI编程非常困难。难在哪呢?因为不知道Symbian控件的运行机制,所以在编程过程中常会出现一些莫名其妙的错误,让人摸不着头脑。

也许有人会说,SDK提供了一些UI的例子,可以进行参考。这话倒是不错,但问题是例子中对相应控件的语句的注释不够充分,最后还是被控件的语句弄得云里雾里的,也许写例子的作者自己觉得,在代码之中的逻辑是非常简单的,所以注释就大大的省略了。但对于像小弟这种缺少对Symbian平台内核机制认识的人来说,只能通过Debug一步一步跟了。

今天正好碰到个需求,需要做个类似控制台的控件,将程序的运行状态通过文本的方式显示在手机屏幕上,因为其显示的字符只局限于英文和数字,所以就想到自定义一个继承于CEikEdwin的文本框控件(CEikEdwin是Symbian中所有文本框类的基类),应该能满足需求。于是通过对控件从创建到使用再到析构的过程,进行了一些分析。现将得到的结果记录在下面,与大家分享。

首先,因为CStatusMonitor是继承于CEikEdwin, 而CEikEdwin是个控件类,所以,CStatusMonitor也是个控件。既然是控件,按照Symbian程序的架构,控件就得放在容器里,所以CStatusMonitor的实例化过程就放在容器的ConstructL中了。

这里需要注意,对于容器来说,每个容器都必须有个窗口,要么是通过CreateWindowL()自己建一个,要么就是通过SetContainerWindowL()用别人已经建好的。这一步,必须放在所有容器ConstructL()函数中的第一步。

然后接着讲CStatusMonitor的创建过程:既然是Symbian自定义控件,那就用Symbian的传统构造方法——二阶段构造:先通过:

CStatusMonitor *self = new (ELeave) CStatusMonitor;

创建一个CStatusMonitor的实例,然后通过调用CStatusMonitor的ConstructL()方法,进行真是构造。这里着重讲一下ConstructL()方法中需要做的事和顺序:

首先,因为Symbian文本框控件的特殊性,上一步骤中的实例是一个还没有初始化完的实例,因此需要调用CEikEdwin::ConstructL()方法,完成该实例的构造,这也就是CStatusMonitor的ConstructL()中的第一步。CEikEdwin::ConstructL()的说明和参数的解释在SDK的文档中有,在此就不作解释了。

接着,为了能使CStatusMonitor能够接受用户通过按下方向键进行光标移动的响应,需要通过SetFocus()将程序的焦点给CStatusMonitor。

然后,因为CStatusMonitor是放在容器中的控件,因此需要使用容器的窗口作为自己的窗口,所以需要把容器的引用传给CStatusMonitor,好让CStatusMonitor在ConstructL中通过调用SetContainerWindowL()方法设置控件的父窗口。

此时,如果需要给文本框加上滑动块,则可以通过调用CreateScrollBarFrameL()->SetScrollBarVisibilityL方法进行设置,设置完后别忘了通过调用UpdateScrollBarsL对滑动块进行更新。至此,CStatusMonitor的ConstructL完成。

接着回到容器的ConstructL()中,继续执行ActivateL()和SetRect()函数,函数的作用请参见SDK,在此不详细说明。

值得注意的是,在执行了ActivateL()后,程序会调用容器的CountComponentControls()函数,获取当前容器中的控件数,别忘了更新这个数目哦;还需要注意的是容器的ComponentControl函数,该函数在CountComponentControls函数调用完后被调用,别忘了在相应的case中加上相应的控件指针,不然会报KERN-EXEC 3空指针错误。

最后在SetRect()被调用后,容器的SizeChanged()函数会被调用,在这里,需要调用控件的SetExtent()函数,设置控件出现的位置和尺寸大小,如果有滑块,别忘了设置滑块大小,设置完后再次调用UpdateScrollBarsL对控件进行更新。

之后就是Symbian程序框架的事情了,编译、运行,文本框就可以显示在手机屏幕上了。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭