目录 3
第1部分 Palm OS入门 3
第1章 理解Palm OS平台 3
1.1 Palm OS的理念 3
1.2 桌面和手持应用程序设计之比较 4
1.2.1 对高性能的期望 4
1.2.2 有限的输入方式 5
1.2.3 狭小的屏幕 5
1.2.4 电池寿命和运算能力 6
1.2.5 有限的内存 6
1.2.6 用RAM做数据持久存储 6
1.3 与桌面相连接 6
1.4 硬件版本之比较 7
1.5 展望未来 13
1.6 总结 13
第2章 理解Palm OS 14
2.1 Palm OS手持设备如何使用电力 14
2.2 运行Palm OS应用程序 15
2.2.1 响应启动码(Launch Code) 15
2.2.2 事件(Event)处理 16
2.3 管理内存 16
2.3.1 动态RAM 17
2.3.2 存储RAM 18
2.4 使用资源 20
2.5 设计程序的用户界面 21
2.5.1 窗体(Form) 21
2.5.3 菜单(Menu) 22
2.5.2 提示(Alert) 22
2.5.4 表格(Table) 23
2.5.5 列表(List) 23
2.5.6 弹出式列表触发器(Pop-up Trigger) 24
2.5.7 按钮(Button) 24
2.5.8 重复按钮(Repeating Button) 24
2.5.9 选择触发器(Selector Trigger) 24
2.5.10 单选按钮(Push Button) 25
2.5.11 复选框(Check Box) 25
2.5.12 滑动条(Slider) 25
2.5.15 文本域(Field) 26
2.5.16 Graffiti状态指示器(Shift Indicator) 26
2.5.14 窗体位图(Form Bitmap) 26
2.5.13 标签(Label) 26
2.5.17 滚动条(Scroll Bar) 27
2.5.18 自定义控件(Gadget) 27
2.6 与其他设备通信 28
2.6.1 串行通信 28
2.6.2 TCP/IP 28
2.6.3 蓝牙(Bluetooth) 29
2.6.4 网页剪辑(Web Clipping) 29
2.6.5 电话 30
2.6.6 IrDA 30
2.6.7 数据交换 30
2.7 Palm OS版本比较 30
2.7.1 2.0版的变化 31
2.7.2 3.0版的变化 31
2.7.6 3.5版的变化 32
2.7.5 3.3版的变化 32
2.7.3 3.1版的变化 32
2.7.4 3.2版的变化 32
2.7.7 4.0版的变化 33
2.7.8 5.0版的变化 33
2.8 总结 34
第2部分 创建Palm OS应用程序 37
第3章 开发工具介绍 37
3.1 使用CodeWarrior for Palm OS 37
3.1.1 熟悉IDE 39
3.1.2 改变目标设置 46
3.1.3 在CodeWarrior中编译和链接 48
3.2 使用GNU PRC-Tools 48
3.2.1 使用PRC-Tools编译和链接 50
3.2.2 使用make自动构建 51
3.3 使用Falch.net DeveloperStudio 54
3.3.1 熟悉IDE 55
3.3.2 在DeveloperStudio中编译和链接 61
3.4 总结 61
第4章 编写第一个Palm OS应用程序 62
4.1 创建Hello World 1 62
4.1.1 包含头文件 63
4.1.2 进入应用程序 64
4.1.3 启动应用程序 65
4.1.4 关闭应用程序 66
4.1.5 处理事件 66
4.1.6 建立窗体 68
4.2 创建Hello World 2 69
4.1.7 响应窗体事件 69
4.2.1 定义资源常量 70
4.2.2 响应窗体事件 73
4.2.3 处理菜单事件 74
4.2.4 显示提示和使用文本域 76
4.3 在Palm OS中使用内存 77
4.4 整合所有代码 81
4.5 总结 87
第5章 调试程序 88
5.1 使用Palm OS模拟器 88
5.1.1 控制POSE 90
5.1.2 初次运行POSE 91
5.1.3 安装ROM映像 92
5.1.4 安装应用程序 94
5.1.5 保存和恢复配置 95
5.1.6 调整POSE的设置 95
5.1.7 掌握Gremlin自动测试工具 97
5.1.8 模拟HotSync同步操作 100
5.1.9 模拟扩展卡 101
5.1.10 捕获屏幕截图 103
5.1.11 处理POSE的错误 103
5.2 使用Palm OS仿真器(Simulator) 104
5.2.1 启动仿真器 105
5.2.2 装载ROM映像 106
5.2.3 安装应用程序和数据 106
5.2.4 运行Gremlins自动测试工具 106
5.2.5 查看数据库、内存与事件 107
5.3 进行源码级调试 109
5.3.1 用CodeWarrior调试 109
5.2.6 保存和装载存储快照 109
5.3.2 用GDB调试 112
5.3.3 用DeveloperStudio调试 114
5.4 使用Palm Reporter跟踪应用程序 116
5.5 复位Palm OS手持设备 118
5.6 使用开发者Graffiti快捷命令 118
5.7 使用Palm OS错误管理器 119
5.8 总结 120
第3部分 Palm OS编程 123
第6章 资源的创建与理解 123
6.1 遵循Palm OS用户界面指南 123
6.1.2 突出常用功能 124
6.1.1 创建快速的应用程序 124
6.1.3 设计易用的程序 125
6.1.4 保持Palm OS风格 127
6.2 使用Constructor工具创建资源 130
6.3 使用PilRC创建资源 139
6.3.1 创建应用程序资源 139
6.3.2 为资源指定常量 143
6.3.3 查看Hello World程序的资源文件 143
6.4 使用DeveloperStudio创建资源 145
6.5 总结 154
第7章 创建窗体和菜单 155
7.1 使用Constructor创建窗体 155
7.1.1 设置对象的通用属性 157
7.1.2 设置对象的特有属性 158
7.2 使用PilRC创建窗体 168
7.2.1 创建窗体资源 168
7.2.2 在窗体中添加对象 169
7.3 使用DeveloperStudio创建窗体 177
7.4 使用Constructor创建菜单 180
7.5 使用Rez创建菜单 182
7.6 使用PilRC创建菜单 186
7.7 使用DeveloperStudio创建菜单 188
7.8 介绍Librarian——一个应用程序的例子 189
7.8.1 在列表视图中显示多条记录 190
7.8.2 在记录视图中显示书籍的详细信息 191
7.8.3 在编辑视图中编辑记录 191
7.8.4 介绍Librarian的菜单 192
7.9 总结 194
第8章 用户界面元件编程 195
8.1 提示对话框编程 195
8.2 窗体编程 197
8.2.1 切换到新的窗体 197
8.2.2 使用FrmDoDialog函数显示模式对话框 198
8.2.3 使用FrmPopupForm函数显示模式对话框 200
8.2.4 更新窗体 201
8.3 窗体中对象的编程 203
8.3.1 处理窗体对象的事件 204
8.3.2 取得对象的指针 206
8.3.3 隐藏和显示窗体对象 207
8.4 复选框和单选按钮的编程 210
8.5.1 选择日期和时间 211
8.5 选择触发器编程 211
8.5.2 选择颜色 213
8.5.3 调节亮度和对比度 215
8.6 文本域编程 215
8.6.1 为文本域设置内存句柄 215
8.6.2 修改文本域 216
8.6.3 从文本域中获取文本 217
8.6.4 设置文本域的焦点 218
8.6.5 设置文本域的属性 219
8.7 自定义控件编程 220
8.8 列表和弹出式列表编程 225
8.8.1 获取列表数据 225
8.8.2 操作列表 226
8.8.3 动态列表编程 227
8.8.4 处理弹出式列表 228
8.9 菜单编程 229
8.9.1 使用MenuEraseStatus函数 230
8.9.2 隐藏菜单项 230
8.9.3 命令工具栏编程 231
8.10 总结 234
第9章 系统元素编程 235
9.1 检查所支持的功能 235
9.1.1 确定操作系统的版本 236
9.1.2 检查其他个别功能 237
9.2 操作文本 238
9.2.1 使用字体函数 239
9.2.2 使用字符串函数 242
9.2.3 使用字符宏 243
9.3 处理手写笔事件 245
9.4 处理按键事件 248
9.5 查找电话号码 251
9.6 启动应用程序 252
9.6.1 调用系统的应用程序启动器 252
9.6.2 直接启动应用程序 253
9.6.3 全局发送启动码 255
9.6.4 创建自己的启动码 255
9.7 产生随机数 255
9.8 管理电源 256
9.9 识别设备 257
9.10 使用剪贴板 258
9.11 总结 259
第10章 图形和声音编程 261
10.1 管理绘图区 262
10.1.1 理解窗口 262
10.1.2 保存和恢复绘图状态 266
10.1.3 取得和设置色深 267
10.1.4 使用颜色表 271
10.2 绘制图形和文本 273
10.2.1 设置传输模式 273
10.2.2 设置前景色、背景色和文字颜色 274
10.2.3 绘制像素 275
10.2.4 绘制直线 275
10.2.5 绘制矩形 276
10.2.6 绘制文本 279
10.2.7 绘制位图 279
10.2.8 改变用户界面的颜色 281
10.3 高分辨率屏幕编程 284
10.3.1 使用高密度显示功能参数组 284
10.3.2 检测可用的屏幕密度 285
10.3.3 设置和取得坐标系统 285
10.3.4 在坐标系统之间转换 286
10.4 播放声音 287
10.4.1 播放简单声音 287
10.4.2 播放采样声音 288
10.5 总结 290
第11章 闹钟和时间编程 291
11.1 设定闹钟 291
11.1.1 设定一个闹钟 292
11.1.2 响应闹钟 293
11.1.3 响应其他启动码 295
11.2 操作时间值 296
11.2.1 获取和设定时间值 296
11.2.2 转换时间值 297
11.2.3 改变时间值 298
11.3 遵循用户的日期和时间设置 298
11.4 引起用户的注意 300
11.4.1 请求注意 301
11.4.2 响应提醒管理器 303
11.4.3 管理引起注意的尝试 306
11.4.4 阻止提醒指示器出现 306
11.5 总结 306
第12章 表格编程 308
12.1.1 理解表格如何工作 309
12.1 创建简单的表格 309
12.1.2 初始化表格 311
12.1.3 处理表格事件 322
12.1.4 隐藏行和列 322
12.2 创建更复杂的表格 324
12.2.1 将表格与数据关联 325
12.2.2 滚动表格 339
12.2.3 处理表格的文本域 349
12.3 总结 353
第4部分 信息存储 357
第13章 存取数据 357
13.1 理解数据管理器 357
13.1.1 记录数据库 358
13.1.2 资源数据库 359
13.2 数据库操作 360
13.2.1 创建数据库 360
13.2.2 打开数据库 362
13.2.3 关闭数据库 363
13.2.4 查找数据库 363
13.2.5 删除数据库 365
13.2.6 取得和修改数据库信息 365
13.2.7 创建应用程序信息块 368
13.3 存储应用程序配置 371
13.4 使用功能内存 374
13.5 总结 375
第14章 操作记录 377
14.1 使用记录 377
14.1.1 深入Librarian例子程序的记录 378
14.1.2 比较记录 382
14.1.3 查找记录 387
14.1.4 创建记录 389
14.1.5 删除记录 391
14.1.6 读取记录 393
14.1.7 修改记录 393
14.1.8 随版本更改数据库结构 402
14.1.9 排序记录 406
14.1.10 取得和修改记录信息 407
14.1.11 分类记录 408
14.1.12 实现私密记录 415
14.1.13 调整记录大小 416
14.2 使用资源 416
14.2.1 查找资源 418
14.2.2 创建资源 419
14.2.3 删除资源 420
14.2.4 读取资源 420
14.2.5 取得和修改资源信息 422
14.2.6 调整资源大小 422
14.3 实现全局查找功能 422
14.3.1 处理sysAppLaunchCmdSaveData 423
14.3.2 处理sysAppLaunchCmdFind 423
14.3.3 处理sysAppLaunchCmdGoto 426
14.4 总结 429
第15章 使用辅助存储器 431
15.1 理解扩展管理器 431
15.2 理解辅助存储器 432
15.2.2 运行辅助存储器上的程序 433
15.2.1 组织文件和目录 433
15.3 使用虚拟文件系统 434
15.3.1 检验VFS管理器的存在 435
15.3.2 监测扩展卡的插入和拔出 435
15.3.3 取得卷引用 438
15.3.4 获取和设置卷标 439
15.3.5 查找卷信息 440
15.3.6 创建目录 440
15.3.7 创建文件 442
15.3.8 删除文件和目录 444
15.3.9 打开和关闭文件 447
15.3.10 取得和设置文件信息 447
15.3.11 读取文件数据 449
15.3.12 定位文件指针 452
15.3.13 写数据到文件 454
15.3.14 查找文件 456
15.3.15 处理Palm OS数据库 457
15.4 总结 458
第5部分 手持设备的外部通信 463
第16章 通过交换管理器共享数据 463
16.1 使用交换管理器 464
16.1.1 注册数据类型 465
16.1.2 发送数据 469
16.1.3 自定义数据接收对话框 480
16.1.4 接收数据 483
16.1.5 显示传送的记录 489
16.1.6 调试传送功能 489
16.1.7 发送应用程序和数据库 490
16.2 理解红外库 492
16.3 总结 493
第17章 使用串口 495
17.1 理解Palm OS串行通信 495
17.2 使用串行管理器 497
17.2.1 使用新式串行管理器 498
17.2.2 使用旧式串行管理器 510
17.3 总结 512
第18章 网络通信 514
18.1 理解TCP/IP网络 514
18.2 用Palm OS网络库编程 515
18.2.2 打开网络库 517
18.2.1 获得网络库引用 517
18.2.3 解析主机名和地址 518
18.2.4 查找服务端口 522
18.2.5 打开套接字 524
18.2.6 连接套接字 524
18.2.7 发送和接收数据 525
18.2.8 断开套接字 528
18.2.9 关闭套接字 529
18.2.10 关闭网络库 529
18.3 总结 530
第19章 创建网页剪辑应用程序 531
19.1 理解网页剪辑 531
19.1.1 理解网页剪辑的安全性 532
19.1.2 设计网页剪辑应用程序和网页剪辑 533
19.2.1 组织HTML文件 534
19.2 构建网页剪辑应用程序 534
19.2.2 定义Header标签 535
19.2.3 格式化文本 536
19.2.4 链接到其他页面和应用程序 537
19.2.5 构造查询表单 541
19.2.6 添加图片 545
19.2.7 使用网页剪辑应用程序构建器 546
19.2.8 考察一个网页剪辑应用程序的例子 548
19.3 生成网页剪辑 550
19.3.1 定义Header标签 550
19.3.2 为桌面浏览器创建剪辑页面 551
19.3.3 链接到外部网页剪辑 551
19.3.4 添加图片 551
19.3.5 考察一个网页剪辑的例子 552
19.4 测试网页剪辑应用程序 555
19.5 总结 556
第6部分 与桌面计算机同步 559
第20章 学习管道基础 559
20.1 理解管道 560
20.2 设计管道 563
20.3 安装管道 564
20.3.1 手工安装管道 564
20.3.2 创建自动管道安装 567
20.4 在HotSync日志中记录动作 569
20.5 总结 571
第21章 创建管道 572
21.1 使用管道向导 572
21.1.2 选择手持端应用程序 573
21.1.1 选择管道类型 573
21.1.3 选择数据传输类型 574
21.1.4 选择管道的功能特性 574
21.1.5 确认类名和文件名 575
21.2 实现管道入口点 576
21.2.1 实现GetConduitInfo 577
21.2.2 实现GetConduitName 579
21.2.3 实现GetConduitVersion 579
21.2.4 实现OpenConduit 579
21.2.5 实现Configuration入口点 582
21.3 使用Palm通用管道基础类 587
21.3.1 遵循通用管道控制流 588
21.3.2 描述桌面记录格式 589
21.3.3 实现数据存储和读取 591
21.3.4 CPalmRecord的数据转换 598
21.3.5 同步应用程序信息块 607
21.4 使用Palm MFC基础类 607
21.4.1 遵循MFC管道控制流 608
21.4.2 实现Monitor类 609
21.4.3 实现Table类 610
21.4.4 实现Schema类 612
21.4.5 实现Record类 613
21.4.6 实现Link Converter类 616
21.5 使用同步管理器API 618
21.5.1 注册和注销管道 619
21.5.2 打开和关闭手持设备数据库 619
21.5.3 遍历数据库记录 621
21.5.4 读取和写入记录 623
21.5.6 维持连接 624
21.5.5 删除记录 624
21.6 总结 625
第7部分 高级主题 629
第22章 导向轮编程 629
22.1 Sony Jog Dial编程 630
22.1.1 理解JogAssist 632
22.1.2 绕过JogAssist工作 633
22.2 HandEra Jog Wheel编程 638
22.3 Treo Rocker Switch编程 639
22.4 总结 640
23.1 创建大型应用程序 641
23.1.1 突破32KB的屏障 641
第23章 拾遗 641
23.1.2 将应用程序分段 643
23.2 为应用程序增加自定义字体 648
23.3 动态创建用户界面 652
23.4 应用程序本地化 654
23.5 使用文件流(File Streaming)API 659
23.5.1 打开文件流 660
23.5.2 关闭文件流 662
23.5.3 获取文件流错误 662
23.5.4 删除文件流 662
23.5.5 在文件流中定位 663
23.5.6 读写文件流数据 663
23.6 总结 664
术语表 665