当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]自从开始接触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程序框架的事情了,编译、运行,文本框就可以显示在手机屏幕上了。

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭