第1章 起步 1
目录 1
1.1 Series 60 C++软件开发包(SDK) 2
1.2 开发过程概述 3
1.3 Series 60模拟器 5
1.4 模拟器上的生成 7
1.4.1 从命令行生成 7
1.4.2 从IDE生成 8
1.5 运行模拟器 9
1.5.3 从命令提示符运行模拟器 11
1.5.1 模拟器可执行文件位置 11
1.5.2 模拟器调试模式 11
1.5.4 从VisualC++IDE运行模拟器 12
1.5.5 从Borland C++Builder 6和C++BuilderX IDE运行模拟器 12
1.5.6 从CodeWarrior IDE运行模拟器 12
1.5.7 定位和运行应用程序 12
1.5.8 调试应用程序 13
1.5.9 使用IDE的进一步帮助 13
1.6 目标Series 60设备的生成 13
1.7.1 生成SIS安装文件 15
1.7.2 SIS文件安装 15
1.7 在目标设备上的部署 15
1.7.3 在目标设备上运行 16
1.8 小结 16
第2章 开发参考 17
2.1 SDK版本和选择 18
2.1.1 Series 60 1.x SDK 18
2.1.2 Series 60 2.x SDK 19
2.2 HelloWorld GUI应用程序 20
2.2.1 HelloWorld bld.inf 20
2.2.2 HelloWorld.mmp 20
2.2.3 生成和运行 24
2.2.4 HelloWorld GUI的可执行文件和运行库文件 25
2.2.5 HelloWorld项目文件和位置 26
2.2.6 HelloWorld GUI源文件 27
2.2.7 资源编译器 28
2.2.8 应用程序和资源的本地化 29
2.2.9 AIF文件 30
2.3 控制台应用程序 32
2.3.1 HelloWorld控制台应用程序 32
2.3.2 生成和运行控制台应用程序 33
2.3.3 HelloWorldCon.mmp 34
2.3.4 HelloWorldCon模拟器可执行文件 34
2.3.5 HelloWorldCon目标可执行文件 34
2.4 Symbian安装系统 35
2.4.1 SIS文件生成工具 36
2.4.2 .pkg文件的格式 37
2.4.3 生成SIS文件 41
2.5 额外的开发工具 41
2.5.1 多位图和位图转换器Bmconv 41
2.5.2 Series 60应用程序向导 43
2.5.3 其他SDK工具 44
2.5.4 更多的工具和实用程序 45
2.6.1 Microsoft Visual Studio.NET 46
2.6.2 模拟器配置 46
2.6 Series 60 SDK和IDE的安装技巧 46
2.6.3 模拟器中的应用程序严重错误 48
2.7 高级应用程序部署和生成指南 48
2.7.1 平台UID 48
2.7.2 设备标识UID 49
2.7.3 资源文件版本和压缩 50
2.7.4 针对ARM目标的生成 50
2.8 小结 52
第3章 Symbian OS基础 53
3.1 命名约定 54
3.1.2 S类 55
3.1.3 C类 55
3.1.1 T类 55
3.1.4 R类 56
3.1.5 M类 56
3.1.6 命名空间 57
3.2 基本类型 58
3.3 异常处理和资源管理 59
3.3.1 异常、异常退出、严重错误和捕获 60
3.3.2 异常退出问题和清除栈 63
3.3.3 两阶段构造 65
3.3.4 Symbian OS构造方法 69
3.3.5 清除栈的高级使用 69
3.4.1 层次结构 70
3.4 描述符 70
3.4.2 不可修改的API 72
3.4.3 可修改的API 73
3.4.4 文字 73
3.4.5 使用描述符 74
3.4.6 作为参数和返回类型的描述符 77
3.4.7 包描述符 79
3.5 集合类 80
3.5.1 RArray和RPointerArray类型 81
3.5.2 CArray类型 86
3.6 结合使用异步服务和活动对象 94
3.6.1 活动规划器 95
3.6.2 活动对象 96
3.6.3 实现活动对象 97
3.6.4 实例 98
3.6.5 常见的活动对象缺陷 106
3.7 文件、流和存储 107
3.7.1 文件 107
3.7.2 RFs API 108
3.7.3 RFile API 111
3.7.4 流 113
3.7.5 存储 118
3.8 客户/服务器架构 124
3.8.1 服务器会话 125
3.8.2 服务器会话和进程间通信 125
3.8.3 服务器综述 127
3.8.4 子会话 128
3.9 小结 129
第4章 应用程序设计 130
4.1 应用程序框架 131
4.2 应用程序架构 133
4.2.1 核心应用程序类 133
4.2.2 应用程序初始化 134
4.2.3 重要的AppUi方法 136
4.2.4 设计应用程序UI 137
4.2.5 基于控件的传统Symbian OS架构 138
4.2.6 基于对话框的架构 142
4.2.7 Avkon视图切换架构 144
4.2.8 选择适当的应用程序架构 149
4.2.9 文件处理 151
4.3 分离应用程序UI和引擎 152
4.4 ECom 156
4.4.1 ECom的概念性概述 157
4.4.2 ECom接口 158
4.4.3 ECom DLL 159
4.5.1 用于开发人员的一般指导原则 161
4.5 国际化 161
4.5.2 本地化的OS支持 163
4.6 良好的应用程序行为 164
4.6.1 采用怀疑的和批评的开发方法 164
4.6.2 处理Window服务器生成的事件 165
4.6.3 总是恰当地退出应用程序 165
4.6.4 在保存数据前检查磁盘空间 166
4.6.5 其他提示和技巧 166
4.7 小结 167
第5章 应用程序的UI组件 168
5.1.2 简单控件和复合控件 169
5.1 控件 169
5.1.1 控件和窗口 169
5.1.3 窗口的所有权 171
5.1.4 创建简单控件 172
5.1.5 创建复合控件 174
5.1.6 建立控件间的关系 177
5.2 皮肤 178
5.2.1 强制性支持皮肤的控件 178
5.2.4 不识别皮肤的控件 179
5.2.5 定义识别皮肤的控件 179
5.2.3 沿用皮肤的控件 179
5.2.2 选择性支持皮肤的控件 179
5.3 事件处理 180
5.3.1 按键事件 180
5.3.2 重绘事件 182
5.3.3 观察器 183
5.4 资源文件 184
5.4.1 资源文件的语法 184
5.4.2 资源文件的结构 186
5.5 菜单 191
5.5.1 子菜单 192
5.5.2 菜单基础 192
5.5.3 动态菜单 196
5.5.4 上下文敏感菜单 197
5.6 面板 199
5.6.1 状态面板 199
5.6.2 标题面板 203
5.6.3 上下文面板 206
5.6.4 导航面板 208
5.6.5 主面板 218
5.6.6 软键面板 218
5.7 小结 218
6.1 对话框的共性 219
第6章 对话框 219
6.2 标准对话框 220
6.2.1 创建简单对话框 220
6.2.2 多页对话框 225
6.2.3 为对话框定义菜单 227
6.2.4 在对话框中使用自定义控件 227
6.3 窗体 229
6.3.1 窗体行 230
6.3.2 窗体软键 230
6.3.3 在应用程序中创建窗体 232
6.4 通知 235
6.4.1 包装式通知 236
6.4.2 自定义通知 237
6.4.3 等待通知 239
6.4.4 进度通知 242
6.4.5 全局通知 246
6.5 查询 247
6.5.1 数据查询 248
6.5.2 列表查询 250
6.5.3 使用全局查询 252
6.6 列表对话框 254
6.7 小结 257
第7章 列表 258
7.2 竖向列表 259
7.1 列表基础 259
7.2.1 选择列表 260
7.2.2 菜单列表 260
7.2.3 可标记列表 261
7.2.4 多选列表 261
7.2.5 列表选项和字段 261
7.2.6 在列表中查找选项 262
7.3 使用竖向列表 262
7.3.1 基本列表 262
7.3.2 动态列表 268
7.3.3 可标记列表 270
7.3.4 弹出菜单列表 272
7.4 网格 275
7.4.1 月历网格 276
7.4.2 收藏夹网格 276
7.4.3 GMS网格 277
7.5 使用网格 277
7.5.1 网格基础 277
7.5.2 可标记网格 283
7.6 设置列表 284
7.7 使用设置列表 286
7.8 小结 296
第8章 编辑器 297
8.1 文本编辑器 298
8.1.1 尺寸和输入容量 300
8.1.2 过滤键盘输入 300
8.1.3 提供对附加字符的映射 301
8.1.4 属性 303
8.1.5 配置无格式文本编辑器 303
8.1.6 配置多格式文本编辑器 307
8.1.7 使用样式 313
8.2 数值编辑器 313
8.3 密码编辑器 317
8.4 多字段数值编辑器 318
8.4.1 IP地址编辑器 319
8.4.2 数字编辑器 319
8.4.3 范围编辑器 319
8.4.4 时间编辑器 319
8.4.5 日期编辑器 319
8.4.6 时间和日期编辑器 320
8.4.7 持续期编辑器 320
8.4.8 时间偏移量编辑器 320
8.4.9 使用MFNE 320
8.5 小结 321
第9章 通信基础知识 323
9.1 串行通信 324
9.2 套接字 329
9.2.1 Series 60的套接字 330
9.2.2 客户端和服务器 330
9.2.3 断开式和连接式套接字 330
9.2.4 连接式套接字 331
9.2.5 安全套接字 339
9.3 TCP/IP 344
9.3.1 IPv6 344
9.3.2 Series 60的TCP/IP编程 344
9.3.4 多重连接 345
9.3.3 CommDB 345
9.4 红外线 350
9.4.1 IrDA栈 350
9.4.2 Series 60设备上的红外线编程 351
9.5 蓝牙 353
9.5.1 蓝牙概述 354
9.5.2 蓝牙应用程序实例 355
9.5.3 服务发布 356
9.5.4 蓝牙安全 358
9.5.5 设备和服务的搜寻 359
9.5.6 蓝牙套接字通信 364
9.6 小结 365
第10章 高级通信技术 367
10.1 HTTP 368
10.2 WAP 376
10.2.1 WAP架构 377
10.2.2 Series 60实现 377
10.3 消息传送 381
10.3.1 消息传送的重要概念 382
10.3.2 关键消息类及数据类型 384
10.3.3 消息传送API 385
10.3.4 使用Client MTM API 386
10.3.5 使用Send-As API 396
10.3.6 使用CSendAppUi 400
10.3.7 监视到达的信息 407
10.4 通话 410
10.4.1 使用ETelAPI 410
10.4.2 起始工作 411
10.4.3 建立通话 412
10.4.4 接听电话 414
10.4.5 获取上次拨打的号码 416
10.5 小结 417
第11章 多媒体:图形和音频 418
11.1.1 窗口服务器 419
11.1 Series 60图形架构概述 419
11.1.2 字体位图服务器 421
11.1.3 窗口服务器与字体位图服务器 421
11.1.4 多媒体服务器 421
11.2 绘图基础 422
11.2.1 屏幕的坐标和几何学 424
11.2.2 图形设备和图形上下文 425
11.2.3 颜色和显示模式 426
11.2.4 画笔和画刷 428
11.2.5 窗口中的视图及其与CCoeControl的关系 428
11.3 字体和文本 429
11.3.1 文本和字体度量 430
11.3.3 使用核心字体类枚举所有可用字体 431
11.3.2 核心字体类和函数 431
11.3.4 文本效果 432
11.4 图形 433
11.4.1 矩形 434
11.4.2 椭圆 434
11.4.3 弧和扇形 434
11.4.4 多边形 435
11.5 位图 436
11.5.1 为应用程序生成位图 436
11.5.3 位图遮罩 438
11.5.2 装载和绘制位图 438
11.5.4 位图函数 439
11.6 动画 439
11.6.1 动画架构 440
11.6.2 离屏位图和双缓冲 442
11.6.3 客户端方式处理动画 443
11.7 直接屏幕访问 444
11.7.1 架构概述 445
11.7.2 直接屏幕访问的关键类 446
11.7.3 实现上的考虑 448
11.8.1 图像转换 449
11.8 图像处理 449
11.8.2 图像旋转 455
11.8.3 图像缩放 456
11.9 音频 457
11.9.1 录音 458
11.9.2 音频声音 461
11.9.3 音频数据 462
11.9.4 流化 463
11.10 小结 465
第12章 使用应用程序视图、引擎和关键系统API 466
12.1 使用标准应用程序视图 467
12.1.1 电话簿视图切换 468
12.1.2 日历视图切换 469
12.1.3 照相机视图切换 469
12.1.4 相册视图切换 470
12.1.5 个人资料视图切换 470
12.1.6 消息视图切换 470
12.1.7 不可切换的应用程序 470
12.2 应用程序引擎 471
12.2.1 日志引擎 472
12.2.2 照相机API 474
12.2.3 电话簿引擎 477
12.2.4 压缩商业卡和vCard 482
12.2.5 日历引擎的访问 483
12.2.6 相册引擎 489
12.3 使用系统功能 491
12.3.1 硬件抽象层 491
12.3.2 系统代理 493
12.3.3 振动API支持 494
12.4 小结 495
第13章 测试和调试 496
13.1 质量保证 497
13.1.1 编码标准 497
13.1.2 防御性编程 498
13.2 测试 501
13.2.1 测试策略 502
13.2.2 测试工具和测试技术 504
13.2.3 在目标机和模拟器上的测试区别 510
13.2.4 测试装置 513
13.3 调试 517
13.3.1 在模拟器上调试应用程序 518
13.3.2 在目标机上调试应用程序 522
13.4 小结 525
附录 模拟器快捷键 526
术语表 529
参考文献 541