本书详细介绍了PALM OS实际应用中大家所关心的一些难点和重点,如数据库、图形图像、快速查找与内嵌程序集成等内容。书中提供了大量的程序实例和使用技术细节,是一本紧密联系实际,实用性很强的书籍。利用书中提供的知识,读者可以把自身的PALM OS开发水平提高到一个新的层次。所有实例程序,均可在随书光盘中找到。\r\n\r\n 本书适合具有一些Palm软件开发经验,且有一些C语言编程经验的读者阅读。\r\n\r\n\r\n
\r\n
第1章 概述 \r\n\r\n 1. 1 代码风格 \r\n\r\n 1. 2 starter工程 \r\n\r\n 1. 2. 1 全局常量 \r\n\r\n 1. 2. 2 应用函数 \r\n\r\n 1. 2. 3 主表单函数 \r\n\r\n 1. 2. 4 starter的应用 \r\n\r\n 1. 3 Utils--工具函数 \r\n\r\n 1. 3. 1 工具函数 \r\n\r\n 1. 3. 2 工具函数的使用 \r\n\r\n 1. 4 工程概览 \r\n\r\n 第2章 三角函数 \r\n\r\n 2. 1 MathLib \r\n\r\n 2. 2 构造自己的函数库 \r\n\r\n 2. 3 简单函数 \r\n\r\n 2. 3. 1 方根 \r\n\r\n 2. 3. 2 绝对值 \r\n\r\n 2. 3. 3 正弦Sin \r\n\r\n 2. 3. 4 余弦Cos \r\n\r\n 2. 3. 5 正切Tan \r\n\r\n 2. 4 反三角函数 \r\n\r\n 2. 4. 1 复杂性 \r\n\r\n 2. 4. 2 查找表的结构 \r\n\r\n 2. 4. 3 查表 \r\n\r\n 2. 4. 4 内插法 \r\n\r\n 2. 4. 5 反正弦 \r\n\r\n 2. 4. 6 反余弦 \r\n\r\n 2. 4. 7 反正切 \r\n\r\n 2. 5 测试 \r\n\r\n 2. 5. 1 测试函数 \r\n\r\n 2. 5. 2 测试结果 \r\n\r\n 2. 6 最后的优化 \r\n\r\n 2. 7 适用范围 \r\n\r\n 2. 8 工程概览 \r\n\r\n 第3章 浮点数 \r\n\r\n 3. 1 浮点数文本框 \r\n\r\n 3. 2 精度 \r\n\r\n 3. 3 Float Field简介 \r\n\r\n 3. 4 手写输入处理 \r\n\r\n 3. 5 浮点数的转换 \r\n\r\n 3. 5. 1 StringToDouble \r\n\r\n 3. 5. 2 DoubleToString \r\n\r\n 3. 6 附加代码 \r\n\r\n 3. 6. 1 在文本框之间切换 \r\n\r\n 3. 6. 2 Edit菜单 \r\n\r\n 3. 6. 3 弹出式按钮处理 \r\n\r\n 3. 7 扩展Float Field \r\n\r\n 3. 8 工程概览 \r\n\r\n 第4章 建立Palm数据库 \r\n\r\n 4. 1 静态数据应用程序 \r\n\r\n 4. 2 Palm数据库格式 \r\n\r\n 4. 2. 1 数据库头部 \r\n\r\n 4. 2. 2 记录列表 \r\n\r\n 4. 2. 3 appInfo记录 \r\n\r\n 4. 2. 4 记录集 \r\n\r\n 4. 3 PDDB--设计 \r\n\r\n 4. 3. 1 几点要求 \r\n\r\n 4. 3. 2 数据输入格式 \r\n\r\n 4. 3. 3 数据输入域 \r\n\r\n 4. 3. 4 text记录类型 \r\n\r\n 4. 3. 5 dbmd记录类型 \r\n\r\n 4. 3. 6 ctgy记录类型 \r\n\r\n 4. 4 PDDB--实现 \r\n\r\n 4. 4. 1 Proxy类 \r\n\r\n 4. 4. 2 输入处理 \r\n\r\n 4. 4. 3 转换处理 \r\n\r\n 4. 4. 4 PDDB转换器 \r\n\r\n 4. 4. 5 输出处理 \r\n\r\n 4. 5 PDDB数据库的应用 \r\n\r\n 4. 5. 1 访问记录 \r\n\r\n 4. 5. 2 访问appInfo \r\n\r\n 4. 5. 3 扩充PDDB \r\n\r\n 4. 6 PakaDB \r\n\r\n 4. 7 工程概览 \r\n\r\n 第5章 快速查找 \r\n\r\n 5. 1 Quiklist的第一个版 \r\n\r\n 本 \r\n\r\n 5. 1. 1 列表结构 \r\n\r\n 5. 1. 2 建立列表 \r\n\r\n 5. 1. 3 画列表 \r\n\r\n 5. 1. 4 执行查找操作 \r\n\r\n 5. 1. 5 查找定时器 \r\n\r\n 5. 1. 6 抢占式查找 \r\n\r\n 5. 2 数据库访问 \r\n\r\n 5. 2. 1 建立数据库 \r\n\r\n 5. 2. 2 添加数据库 \r\n\r\n 5. 2. 3 检索数据库 \r\n\r\n 5. 2. 4 画列表 \r\n\r\n 5. 2. 5 可选的查找方案 \r\n\r\n 5. 3 版本3--类别支持 \r\n\r\n 5. 3. 1 添加类别弹出列表 \r\n\r\n 5. 3. 2 添加只读类别 \r\n\r\n 5. 3. 3 检索数据库 \r\n\r\n 5. 3. 4 画列表 \r\n\r\n 5. 4 扩充Quiklist \r\n\r\n 5. 5 工程概览 \r\n\r\n 第6章 图形图像 \r\n\r\n 6. 1 显示地图 \r\n\r\n 6. 1. 1 用户界面和地图 \r\n\r\n 6. 1. 2 Mapper \r\n\r\n 6. 2 地图基础 \r\n\r\n 6. 2. 1 坐标系统 \r\n\r\n 6. 2. 2 测地线和基准线 \r\n\r\n 6. 2. 3 投影 \r\n\r\n 6. 2. 4 位图格式的地图 \r\n\r\n 6. 2. 5 矢量格式的地图 \r\n\r\n 6. 3 用Palm OS位图来绘制地图 \r\n\r\n 6. 3. 1 创建地图 \r\n\r\n 6. 3. 2 读取地图 \r\n\r\n 6. 3. 3 坐标表示 \r\n\r\n 6. 3. 4 显示地图 \r\n\r\n 6. 3. 5 事件处理 \r\n\r\n 6. 3. 6 滚动地图 \r\n\r\n 6. 3. 7 可选的滚动方案 \r\n\r\n 6. 3. 8 缩放 \r\n\r\n 6. 4 添加关注点 \r\n\r\n 6. 4. 1 定位关注点 \r\n\r\n 6. 4. 2 取关注点 \r\n\r\n 6. 4. 3 显示关注点 \r\n\r\n 6. 4. 4 选定关注点 \r\n\r\n 6. 4. 5 在关注点上放置标签 \r\n\r\n 6. 5 工程概览 \r\n\r\n 第7章 Global Find方案 \r\n\r\n 7. 1 数据库浏览 \r\n\r\n 7. 1. 1 虚拟数据库编号 \r\n\r\n 7. 1. 2 遍历数据库 \r\n\r\n 7. 1. 3 显示数据库信息 \r\n\r\n 7. 2 自动扫描 \r\n\r\n 7. 2. 1 进度对话框 \r\n\r\n 7. 2. 2 实现进度对话框 \r\n\r\n 7. 2. 3 进度管理的优缺点 \r\n\r\n 7. 3 自制的进度对话框 \r\n\r\n 7. 3. 1 扫描数据库 \r\n\r\n 7. 3. 2 取消扫描 \r\n\r\n 7. 4 搜索记录 \r\n\r\n 7. 4. 1 再次扫描 \r\n\r\n 7. 4. 2 带动画的进度对话框 \r\n\r\n 7. 4. 3 数据库过滤 \r\n\r\n 7. 4. 4 检查记录 \r\n\r\n 7. 5 扩展GMDBViewer \r\n\r\n 7. 6 工程概览 \r\n\r\n 第8章 以应用为由心的网络编程 \r\n\r\n 8. 1 为什么以应用为中心 \r\n\r\n 8. 1. 1 用户界面 \r\n\r\n 8. 1. 2 系统结构 \r\n\r\n 8. 1. 3 我们的方法 \r\n\r\n 8. 2 我们的例程 \r\n\r\n 8. 3 Wx \r\n\r\n 8. 3. 1 管理无线设备 \r\n\r\n 8. 3. 2 参数设置 \r\n\r\n 8. 3. 3 获取Web内容 \r\n\r\n 8. 4 nAPI \r\n\r\n 8. 4. 1 nAPI的数据结构 \r\n\r\n 8. 4. 2 网络层 \r\n\r\n 8. 4. 3 WWWPref \r\n\r\n 8. 4. 4 WWWFetch \r\n\r\n 8. 5 nAPI中的InetLib \r\n\r\n 8. 5. 1 初始化InetLib \r\n\r\n 8. 5. 2 建立网络连接 \r\n\r\n 8. 5. 3 读取响应 \r\n\r\n 8. 5. 4 关闭连接 \r\n\r\n 8. 5. 5 显示无线状态指示器 \r\n\r\n 8. 6 在程序中使用nAPI \r\n\r\n 8. 7 工程概览 \r\n\r\n 第9章 同内嵌程序交互 \r\n\r\n 9. 1 Palm OS内嵌数据库格式 \r\n\r\n 9. 1. 1 基本原理 \r\n\r\n 9. 1. 2 Memo \r\n\r\n 9. 1. 3 To Do列表 \r\n\r\n 9. 1. 4 地址簿 \r\n\r\n 9. 1. 5 日程表 \r\n\r\n 9. 2 基于属性的方法 \r\n\r\n 9. 3 NDBTest \r\n\r\n 9. 4 nDB执行 \r\n\r\n 9. 4. 1 结构和类型 \r\n\r\n 9. 4. 2 打开和关闭数据库 \r\n\r\n 9. 4. 3 记录搜索 \r\n\r\n 9. 4. 4 继续查找 \r\n\r\n 9. 4. 5 释放记录 \r\n\r\n 9. 4. 6 获取记录内容 \r\n\r\n 9. 5 记录结构分析 \r\n\r\n 9. 5. 1 Memo记录 \r\n\r\n 9. 5. 2 任务记录 \r\n\r\n 9. 5. 3 地址记录 \r\n\r\n 9. 5. 4 日程表记录 \r\n\r\n 9. 6 在程序中使用nDB \r\n\r\n 9. 7 扩展nDB \r\n\r\n 9. 8 工程概览 \r\n\r\n 第10章 纠错 \r\n\r\n 10. 1 例程 \r\n\r\n 10. 1. 1 Twiddle \r\n\r\n 10. 1. 2 Dials \r\n\r\n 10. 2 准备 \r\n\r\n 10. 2. 1 抽象 \r\n\r\n 10. 2. 2 范围 \r\n\r\n 10. 2. 3 断言 \r\n\r\n 10. 2. 4 Scaffolds \r\n\r\n 10. 3 调试 \r\n\r\n 10. 3. 1 Gremlin \r\n\r\n 10. 3. 2 日志 \r\n\r\n 10. 3. 3 Debug ROM \r\n\r\n 10. 3. 4 Profiler程序剖析 \r\n\r\n 10. 4 结论 \r\n\r\n 10. 5 工程概览 \r\n\r\n \r\n\r\n \r\n
\r\n
本书的译者们都是工作在一线的PALM OS开发人员, 对写代码这份工作的苦与乐有着切身的体会. 我们常常会为了一个难题而工作到深夜, 可是那种"找到啦!"的感觉, 又会给我们带来无穷的喜悦和满足.
写程序的人都知道, 一切好的参考书对于程序员来说, 其价值不亚于多了一个良师益友. <Advanced PalmTM Programming>就是这样的一本好书. 好东西当然要与大家分享, 我们衷心地希望该书的读者们能够和我们一样享受到该书带来的方便和乐趣, 这也是我们翻译该书的动机.
正如该书作者所言, 这本书不是为初学者写的. 作为译者, 我们也希望您在读该书之前了解一些PALM OS开发的基本知识, 并有一定的C语言的开发经验. 当然, 这本书也不是在探讨一些高深的理论问题. 作者的重点主要放在如何解决实际开发中的常见问题. 如PALM中DATABASE的结构, 如何快速查找, 如何开发图形应用, 如何与PALM内建程序集成等. 换句话说, 如果您正在开发一个PALM应用程序的话, 这本书将会成为您最好的帮手.
另外值得一提的是这本书的代码风格和技巧. 记得很久以前, 我读过一本叫"代码大全"的书, 主旨是讨论如何写出"规则的"程序, 书中很详细地谈到命名约定. 函数设计, 可移植性, 记法等程序的基本要素. 我个人认为, 我们每一个程序员都应该做一些这方面的自我训练. 这本书的示例代码可以说是一个很好的范本, 推荐大家多读几遍.
由于这本书是用业余时间完成翻译的, 时间比较仓促, 疏漏之处在所难免, 请广大读者不吝指正. 我的邮箱地址是bans75@163. com. 该书的作用Steven Mann先生, 也会在www. palmos. com的开发者论坛上回答大家的问题. 国内的www. plamheart. net上也有很多高手, 希望大家多多交流, 共同进步.
译者
Sieve Mann是一名软件开发者. 顾问. 分析家和作家, 从1993年以来他一直在专门研究移动计算. 他是Handheld System杂志的前任出版商和编辑, Programming Applications with the Wireless Application Protocol(Wilev, 2000)的作者, 以及The Wireless Application Protocal(WAP):A Wiley Tech Bridf(Wiley, 2000)的合著者. 他拥有计算机科学的学士和硕士学位, 从事计算机工业方方面面的工作已有25年多的经验, 其中包括他的数百篇杂志文章. Mann是WorldFAQ的开发者, WorldFAQ是分发最广的Palm OS-兼容世界时钟和旅行工具, 每天都有成千上万的人
当我们开始讨论写作一本关于在Palm操作系统(OS)上开发应用软件的书的时候, 市面上已经存在至少五种相同主题的书了. 这些书都写得很好, 也非常有用, 它们涵盖了创建Palm软件的基本环节.
本书中, 我们重点讨论两种类型的程序. 一种是专门用来解决Palm操作系统问题的程序, 比如计算三角函数. 格式化浮点数. 用有限的几个Graffiti键击在庞大的列表中查询和显示单个记录.
另外我们还介绍了对于不同类型的程序级问题所采取的一般性解决方案. 采用什么一般性的好方法来显示地图信息呢?如何将桌面型数据转换成Palm数据库(PDB)文件以适合从Palm程序中访问呢?怎样寻找不同方法下发送到Palm设备上并驻留在未知程序数据库中的消息呢?
我们涉及的内容还不止这些. 本书中包含了重要的源代码, 以及关于我们算法和技巧的详细说明. 此外本书还附赠CD-ROM, 里面含有本书中所有程序的源代码.
内容简介
本书共分为10章. 第1章"概述", 讨论我们的代码风格. starter工程. 所使用的工具, 以及公共实用程序. 请在阅读其他章节之前先阅读本章.
其余的章节都可以分别阅读. 我们尽量使它们各自独立, 除了一些公共实用程序不能严格地归入任何一章.
第2章"三角函数", 介绍了一个实用的. 精确度适当的三角函数库, 其中包括正弦. 余弦. 正切. 平方根. 绝对值以及反正弦. 反余弦和反正切函数. 这个库大约需要7KB内存(RAM). 另外这一章还讨论了数值精度和测试.
第3章"浮点数", 讨论了浮点输入. 格式化和转换. 可以通过函数将ASCII码字符串和双精度数值相互转换. 将双精度数值转换成ASCII码的时候, 需要进行精度控制. 定位. 队列和溢出域值等的操作. 此外, 我们还提供了一个数据输入的一般性方法, 帮助你输入负浮点数和控制小数点左边和右边的数字位数.
第4章"建立Plam数据库", 在"建立Palm数据库"中, 先描述Palm数据库(PDB)格式, 然后展示建立Palm OS数据库的Java平台程序, 包括目录和复杂记录格式和从文本输入文件. 最后是一段Palm程序, 向你演示用这一工具建立的数据库.
第5章"快速查找", 介绍了在一个大列表中快速查找单个项目的三种方法. 我们用Graffiti在基于RAM的数组和Palm数据库中执行多字符查询. 第三种方法用来处理带目录的Palm数据库.
第6章, "图形图像", 介绍一段叫做Mapper的程序. Mapper演示了显示和浏览两位位图的一些技巧, 包括面板. 缩放. 跟踪. 标志兴趣点, 以及管理多层图形.
第7章, "Global Find方案", 介绍如何在Palm设备上寻找消息. 通过在所有数据库中搜索特定消息格式, 最终解决与发送传输和程序特定要求相关的所有问题. 这个技术对管理各类信息发布都简单有效. 另外还介绍了怎样使用Palm OS进程管理器, 并讨论了向用户报告进度的其他方法.
第8章"以应用为中心的网络编程", 集中讨论网络, 用Palm公司的InetLib来讲述如何建立一个独立传输的通信应用程序界面(API), 它能够隐藏所有细枝末节, 使你可以专心于你的程序. APIs便于扩展以支持InetLib以外的库.
第9章, "同内嵌程序交互", 解决了一个似乎是Palm开发者新闻组中产生的问题:访问内嵌程序数据库. 这一章描述了便签. 任务列表. 地址簿和日程表数据库, 介绍了基于属性的库, 可以用它从数据库中搜索和读取成组的记录或记录文本框.
高级的编程书如果不包含检错内容就算不得完整. 因此我们有第10章"纠错". 我们讨论了一般意义上的开发和调试, 并重点针对Palm操作系统, 并着重讨论了两段程序用以演示我们的一些纠错技巧.
上述主要章节的描述并没有列出我们涉及的所有主题. 每一章还含有各自的宝贝--代码风格的例子. 测试建议以及大量的提示. 窍门和技巧.
本书的读者群
本书不适用于程序开发初学者和Palm开发初学者. 首先, 你需要有一些C语言编程经验. 几乎所有的Palm开发都用C语言. 在众多好的C语言参考书中, 我们建议你使用Reek和Kelley的.
你还需要有一些Palm软件开发经验. 至少你应当使用过Palm软件开发工具包(SDK)指南, 它能够指导你如何建立内嵌便签簿程序, 并至少读过一遍PalmOS SDK Reference. Palm OS中有许多管理器和APIs. 我们对它们不作解释. 我们假定你了解这些基本管理器. 它们的名称和调用协定, 以及如何使用它们等.
达到上述两点之后, 就能从本书中受益良多. 如果读者是用C语言创建Palm程序的商业开发者, 那么应该好好阅读本书, 这本书就是为你而写的. 你肯定会喜欢它的, 否则, 请告诉我们原因. 我们将努力改进.
本书对企业开发者也同样有用--也许不像前者那么作用显著. 我们主要着眼于独立客户程序. 书中没有太多关于网络. 通信和连接等企业手提计算机所需方面的内容. 如果你需要了解上述内容, 请与我们联系.
所需工具
开发Palm OS兼容软件, 需要如下两项, 开发环境和一个SDK. 开发环境包括编译器. 连接器. 调试器和用户界面开发工具. SDK包括文档. 头文件. 指南和其他零碎的东西.
开发环境可以有两种选择:一种是Palm计算平台的CodeWarrior, 可以运行在Windows和Macintosh OS上, 另一种是PRC-Tools, 它是来源于GNU C编译器的工具, 适用于Windows和Linux. 你可以从Palm公司的网站www. palmos. com上下载CodeWarrior和PRC-Tools的普通版本. 如果你需要开发用于发布和销售的软件, 则需要购买CodeWarrior的商业版本. Palm公司网站上也有商业版本. 当前的SDK是3. 5版. CodeWarrior和PRC-Tools的各个版本都可以从palm公司的网站上进行下载.
在开发Java程序的时候我们仍然使用的是CodeWarrior, 见第4章. 我们使用的是Macintosh的CodeWarrior R5, 最终程序测试用的是Apple的Java MacintoshRuntime. 因为我们只用JDK1. 1. x版本, 相信你可以选择这些程序并在任何支持Sun JDK1. 1. 8的平台上使用. 同样, 这些程序也可以在更早版本上运行而无须任何修改.
CD-ROM和其他资源
本书附赠的CD-ROM中包含我们讨论的所有程序的源代码, 其中含有原始的源代码和CodeWarrior第6版项目文件.
这里向读者介绍另外的两个资源. 如果你已经有一些Palm编程经验, 可能已经知道这第一个资源, Palm公司的网站www. palmos. com这个网站几乎包含学习Palm编程需要的任何东西, 包括软件下载. 技术支持新闻组. 基本原理等等. 这个资源对任何成功的Palm开发者都是必不可少的.
第二个资源就是本书的网站www. cdpubs. com/paka. 我们打算发布源代码更新. 评论意见, 以及本书读者觉得有用的任何其他内容. 对本书或者该网站有任何的意见和建议, 请发e-mail至pake @ cdpubs. com.
我们的应用程序标志
本书中的所有项目都使用Palm OS应用程序标志"PAKA". PAKA代表"Palm Algorithms for Killer Applications(顶级程序的Palm算法)". 这是我们最早向出版社提议的本书的副标题. 出版社不喜欢这个副标题, 另选了一个不太容易引起争议而略显严肃的"Developing Real-World Applications(实用程序开发)".
当我们得知这个新的副标题的时候, 我们已经注册了"PAKA", 而且在我们的例程中使用了它. 我们也曾考虑过将应用程序标志换成"DRWA", 但这个缩写词不太顺口. 况且, 短语"Palm Algorithms for Killer Applications"包含有本书中的代码和算法是由Palm公司创建或者由他们认可的意思, 我们当然不愿意有任何一种误解. 另外一种候选的副标题在语义上可能更贴切些"Algorithms for Killer Palm Application到优秀Palm程序的算法)"或者"AKPA". AKPA听起来还可以, 但是PAKA听起来比这二者都好.
我们在电影"阳光男孩"中首次听过一首歌曲, Walter Matthau 和 Geroge Burns演唱. 带硬辅音的单词听起来有点滑稽, 比如"chicken"有点滑稽, 而"slime"就不. (当然, 这个规则还取决于翻译, 取决于你如何发音和你怎么看待slime--但是, 喂, 我们是在讨论电影. )缩略语同样也需要智慧. 好的缩略语可以有硬辅音, 但最好不要用元音开头. PAKA中含有两个硬辅音, 但我们已经找不到更好的词了.
结果是我们坚持用"PAKA", 在我们所有的程序中也使用它. 因此, 你不能在一个Palm设备上同时安装和运行CD-ROM中两个或两个以上的程序. (第10章中有一个例外).