分类:
2008-10-15 13:51:31
Symbian OS for programmers Andy Weinstein, Degel Software Ltd Version 1.0, Oct 2002 1.简介。
本文讨论了当一个典型的 C++程序员初次接触Symbian操作系统时可能遇到的问题。我们开发过三个成功版本Symbian操作系统的经验使我们十分清楚在这个不算丰富稳定的环境中工作什么才是困难的。Symbian成功的一个原因是许多手机生产商非常不希望被绑在微软这条贼船上,另一个原因是Symbian集成了轻量级、一流的系统,同时又可以提供如此广泛的功能。这里的一些提示也许会对开发成功的Symbian操作系统应用程序有所帮助。
2.文档和资源。
对于一个普通的Windows程序员来说,他对Symbian操作系统首先注意到的方面就是相比起微软的高级精良装备来说,Symbian开发文档实在是太少了。虽然这种情况正在得到改善,某些API类仍然没有相关文档。比如CEikRichTextEditor这个类在文档中就没有独立条目。CRichText这个类包括了大多数相关功能,被收入了文档,但你可能并不知道何时第一次使用这种控制(参见我们下面关于对象结构的说明)。
相对花费大量的人力物力去完善文档,更简便的方法基于这样一种事实:Symbian提供了大量的源代码(虽然还不是整个操作系统)和例程。程序员无需猜测许多API的行为——他们只要看看执行情况。要是这样还不够,Symbian对一些组件,例如Word,一样提供了源代码。API和例程相结合足以满足大多数程序员的需要。
从6.0版开始,Symbian操作系统95%的源代码是对其白金合作伙伴项目(Platinum Partner Program,)成员开放的。这个需要额外付费注册。这个项目的影响之一就是某些老版本开发包的完整源代码不再提供,取而代之的是Symbian或者Nokia公司一边继续完善文档,一边提供不断扩充的例程。比如随Series 60提供的文档就有一个名为“如何操作rich text”的独立条目(虽然CEikRichTextEditor仍然没有条目)。
文档中还有许多其他有用的,写得很好的“How to”文章。在Series 60中,文档和例程的结合使用是显而易见的——文档中对每一个Avkon UI类都直接引用有例程。
Windows程序员还有一个要习以为常的事情是缺乏有用的外部资源,虽然这种情况正在得到改善。《专业Symbian编程》(‘Professional Symbian Programming’ (PSP))包含了许多有用的信息,但是作为快速参考就不太合适,而且它成书于Symbian操作系统第5版的时候——新版将于2003年早些时候面世。PSP还不算过时,但情况有所改变,尤其是在UI层次上。有本书叫《Symbian设备无线》(‘Wireless for Symbian Devices’)也许更新一些,可对C++开发者没什么用处。还有《Symbian操作系统通讯编程》(‘Symbian OS Communications Programming’)和《Series 60及Symbian操作系统编程》(‘Programming for Series 60 and Symbian OS’)也已上架。更多细节可以在找到。
在线文档和Q-A资源确实有助于弥补空白。Symbian自己设立了“Symbian开发者网络”,这是一个集论坛、FAQ、样例和其它有用信息于一身的网络资源。它的地址是也有一个类似的项目叫做“Nokia论坛”,网址位于.到底该去哪里可并不一定,而且你贴出了问题也不一定就会有答案——这依赖于你其它的开发伙伴的与人为善。Symbian和Nokia的内部人员有时的确会出现在这里,但是如果你希望从知道答案的那个人口中得到确切答复,你需要付费注册。Symbian的付费注册地址在的“Partner Programs”中,Nokia的则可以从Nokia论坛的“Developer Support, Technical Case Solving”中找到。不过还是先看看免费资源吧:这里有大量有用的最新信息和资源,包括定时的开发包升级。
3.对象结构。
Symbian操作系统有一个需要花费时间来熟悉的方面在于他非常强大的对象结构。例如,一个列表框(list box)不是一个对象——而是四个:列表框对象(list box object)、模型(model)、视图(view)和绘图器(drawer)。它们之间的功能划分是可以预期并且很符合逻辑的。
编辑控制就复杂的多。乍一看上去,它好像只有两个主要对象:UI控制和一个包含处理文本格式化的文本对象。但是对格式化的操作引入了对字符格式化和对段落格式化的更进一步的对象。这些,按照次序,使用了独立的mask对象来指示显示了你希望对任何给定调用定位的格式化的API调用。所以操作文本显示为黑体还是非黑体,同时还影响到行间距的代码就需要用到CEikRichTextEditor、CRichText、TCharFormat、TCharFormatMask、CParaFormat和CparaFormatMask这几个类。这里有一段这样的代码:TCharFormat defaultFormat;TCharFormatMask formatMask;formatMask.SetAttrib(EAttFontStrokeWeight);CRichText* text = iDisplay->RichText();text->Reset();for (int i = 0; i < 10; ++i)
[1]