上一篇:Symbian Series 60 程序开发(1) Hello World
继为 S60 成功编译 hello world 程序之后,我又尝试了一下跟实用程序更接近一步的开发——使用列表控件即 ListBox,这是在 S60 手机上比较常见的控件。大概花了5个小时的时间,终于知道最基本的用法,然而我已经开始对 Symbian 开发失去兴趣,因为 ROI 太低了。花的时间多,费的力气多,这还只是刚刚开始。我后来看了一眼怎么开发利用 API 如 flickr、evernote 等的应用,发现了由 Nokia 自己写的,网上广为流传的 CClientEngine 类,很复杂,用起来也很复杂。所以本来打算写一系列文章的,可是到这个第二篇,也许就是最后一篇了,目前不太想在这个事上浪费时间。
最后的代码很简单,时间都浪费在文档查找与尝试的过程中。大致过程如下:
- 在 AppView 类的头文件中包含必要的头文件,添加成员变量定义
- 在 AppView 类的 ConstructL 函数里添加创建 ListBox 的代码
- 给 AppView 类实现 CountComponentControls,提供接口告诉外层容器该 view 包含多少个控件(本例是1)——我感觉这是设计缺陷
- 给 AppView 类实现 ComponentControl(TInt aIndex), 提供接口给外层容器,使其可以根据 index 取得相应的控件——感觉同上,如果你没有实现这两步,程序就是个白板,ListBox won’t be rendered.
- 给 AppView 类实现 OfferKeyEventL 函数,将按键事件传递给 ListBox 控件
- 千万不要忘记在 CHelloS60AppUi::ConstructL 中 AppView 被创建后,将它加入 Control Stack,否则按键事件不会传递过去
- 编辑 group 文件夹下面的 mmp 文件,添加需要链接的 lib 文件
- 编译方法照旧
我懒得每一步都贴出代码了,不过我在 Google code 上创建了一个 project: hello-s60. 它基于 svn 的 browse source 功能比在这里贴代码清楚多了。Revision 3 即是本文中所介绍的代码修改,可以非常清楚地看到具体在哪些文件,哪个地方。
这里给出一些稍微有点价值的文档:
- API Reference Guide
- 从上面的节点依次选择:C++ API Reference -> S60 Platform Services -> UI Framework Services 可得到比较有价值的 UI 控件类介绍
- Lists API: Using Lists API – 各种各样的 ListBox 的用法 (该文档位于 UI Framework Services -> UI Components – Lists API)
- Handling key events in your application
- Compound controls in traditional architecture – 必须看这个文档才知道如何正确添加控件
最后抱怨一下,基于 Frame 的文档用户体验相当不好,浏览器地址栏的 URL 从来不会改变,因此不便于分享。
这程序安装到我的 E71 上,我每天就靠按上下键打发时间……哈哈
Leave a Reply