译者的话 1
第1章 Win32中的软件开发 1
1.1 Microsoft Windows的演变 1
1.2 我们在哪里 3
1.3 32位编程的引入 5
1.4 Windows的硬件需求 6
1.4.1 Intel x86微处理器家族 6
1.4.2 清除分段限制 11
1.4.3 页的结构 12
1.4.4 后备缓冲区的转换 13
1.4.5 虚拟8086模式 14
1.5 系统信息的管理 14
1.6 抢先式多任务对开发的影响 16
1.7 Windows 3.x使用的老式多任务 17
1.7.1 Win32的多任务 19
1.7.2 多线程开发 20
1.8 异步输入模式 21
1.9 内存管理的运用 22
1.9.1 分页文件的检查 23
1.9.2 对地址空间的理解 25
1.9.3 预约和委托 25
1.9.4 异常事件的深入理解 28
1.10 异常处理程序的使用 28
1.10.1 具有潜在危险的封装代码 28
1.10.2 关开PAGE_GUARD 37
10.10.3 内存的释放 38
1.11 灵活运用内存 39
第2章 Win32开发工具 44
2.1 硬件组件 44
2.2 软件组件 45
2.3 开发模式和API 47
2.4 Win32应用程序的建立 48
2.4.1 Windows 95链接程序 50
2.4.2 模块定义文件 53
2.4.3 资源文件 54
2.4.4 头文件 55
2.5 INCLUDE示例 64
2.6 一段简单的C教程 71
2.7 关于句柄 74
第3章 Win32应用程序的开发 77
3.1 检查Win32的一个入口 77
3.1.1 Win32的hPrev Instance参数 78
3.1.2 lpCmdLind参数 79
3.2 nShowCmd参数 79
3.3 窗口类的注册 80
3.4 窗口的建立 94
3.4.1 注意一些常见的失误 98
3.4.2 窗口的显示 98
3.4.3 消息循环的实现 99
3.5 理解窗口进程 101
3.5.1 拦截和处理 102
3.5.2 建立开发规则 103
3.6 欢迎进入Win32的世界 104
3.7 “欢迎”的其他注意事项 105
3.8 注册表数据库的运用 110
3.9 关于进程、窗口和实例 121
3.10 总结 124
第4章 消息和重画模式 126
4.1 关于消息 129
4.1.1 消息的张贴 129
4.1.2 消息的发送 131
4.1.4 把消息发送给其他类的窗口 133
4.1.3 把消息发送给同一类的窗口 133
4.1.5 消息发送的实践 134
4.2 窗口和消息 135
4.3 限制窗口的运动 144
4.4 消息和抢先式多任务 149
4.5 API和消息 153
4.6 Spy和消息 154
4.7 重画技术 155
4.7.1 硬件处理 156
4.7.2 设备现场 157
4.7.3 访问显示现场 158
4.8 什么时候用GetDCO 161
4.8.1 输出模式 163
4.8.2 WM_PAINT消息 164
4.9 背景的清除 166
4.9.1 屏蔽一个矩形 167
4.9.2 显示一些正文 167
第5章 资源文件 174
5.1 资源API 176
5.2 图标的载入 177
5.3 图标的运用 184
5.4 STRINGTABLE资源 187
5.5 一次性载入多个串 189
5.6 其他二进制资源 190
5.7 用户自定义资源 193
第6章 菜单的运用 198
6.1 菜单项的选用 199
6.2 检查菜单模板 201
6.2.2 MENUITEM选项 204
6.2.1 菜单项定义 204
6.2.3 一个典型的MENU资源 205
6.2.4 载入菜单模板 207
6.3 与菜单的交互作用 211
6.4 扩展菜单 215
6.4.1 从头建立一个菜单 220
6.4.2 在运行期间修改菜单 222
6.4.3 一次性载入多个菜单 226
6.5 菜单的修改 228
6.5.1 缺省菜单项 231
6.5.2 在运行期间建立一个菜单 232
6.6 弹出式菜单 232
6.7 把位图用作菜单项 239
6.8 物主绘图菜单 242
6.9 加速键的实施 247
6.10 热键特性 250
6.11 系统菜单 253
第7章 建立窗口的艺术 256
7.1 叠置式窗口类型 257
7.2 弹出式窗口类型 260
7.3 子窗口类型 262
7.3.1 子窗口的建立 264
7.3.2 从属:父子关系 265
7.4 标题栏按钮 267
7.5 三种窗口尝试 267
7.5.1 一起来聚会!版本1 268
7.5.2 一起来聚会!版本2 273
7.5.3 一起来聚会!版本3 276
7.6 OWNER弹出式窗口示例 278
7.7 窗口坐标 280
7.8 窗口定位 284
7.9 窗口的重定位 288
7.10 一次性定位多个窗口 290
7.11 消息框的建立 293
7.11.1 定制消息框 294
7.11.2 语言和子语言定义 294
7.11.4 有趣的消息框 296
7.11.3 用按钮建立消息框 296
7.12 一次运行一个程序拷贝 298
7.12.1 用信号机限制拷贝 300
7.12.2 建立一个简单的字处理程序 302
7.13 标准内存区的延展 304
第8章 Win32的对话框管理 311
8.1 模态和非模态对话框 313
8.2 对话框的建立 315
8.2.1 对话进程 315
8.2.2 从资源文件装载模板 316
8.3 窗口还是对话框 319
8.4 对话框模板 323
8.5 About框 325
8.6 通知代码 326
8.7 非模态对话框的运用 328
8.8 对话框的收缩 330
8.9 通用对话框 332
8.10 对话框的居中显示 339
第9章 预定义的窗口类 342
9.1 控件的建立 343
9.1.1 关于风格 343
9.1.2 消息和控件 345
9.1.3 通知代码 345
9.2 列出Win 32进程 348
9.3 六种预定义的类 352
9.3.1 BUTTON类 353
9.3.2 LISTBOX类 360
9.3.3 EDIT类 372
9.3.4 EDIT类的宏 375
9.3.5 COMBOBOX类 376
9.3.6 STATIC类 378
9.3.7 SCROLLBAR类 382
9.4 资源列举 385
9.5 图标的提取 391
9.6 MDICLIENT类 396
第10章 Windows 95通用控件 397
10.1 建立通用控件 398
10.2 通用风格 399
10.3 通知代码 400
10.4 通用控件探秘 402
10.5 图象列表 408
10.5.1 图象列表的管理 414
10.5.2 图象列表和拖放 414
10.6 树形视窗控件 422
10.6.1 插入一个新条目 424
10.6.2 项目标签的编辑 429
10.6.3 分支排序 432
10.6.4 消息和宏函数 435
10.6.5 图象列表和树形视窗 438
10.6.6 通知代码 440
10.6.7 树形视窗项目的拖动 441
10.6.8 算法的考虑 443
10.6.9 树形视窗控件的最后几点注意事项 443
10.7 列表视窗控件 443
10.7.1 列表视窗控件的建立 446
10.7.2 视窗的改变 454
10.7.3 列表视窗的消息 456
10.7.4 项目的比较 459
10.7.5 列表视窗的宏函数 461
10.7.6 通知代码 464
第11章 图形设备接口示例 466
11.1 MESSY示例 466
11.2 对象的描绘和移动 468
11.2.1 数据结构 472
11.2.2 几何形状的描绘 473
11.2.3 现成对象的移动 477
11.2.4 位图的载入 478
11.2.5 源代码剖析 479
11.2.6 拖放位图的接收 481
第12章 非标准的输入和输出 482
12.1 键盘 482
12.1.1 键盘输入的控制 483
12.2 ANSI或ASCII 484
12.3 Unicode和Windows 95 486
12.4 鼠标 494
12.5 鼠标捕获 499
12.6 鼠标双击 501
12.7 左键和右键的同时单击 507
12.8 工具栏 509
12.8.1 工具栏的定制 518
12.8.2 工具提示 523
12.8.3 状态栏 524
12.9 动画控件 527
12.10 侦查其他窗口 528
12.11 一个多媒体CD播放器 534
12.11.1 PLAYCD的工作原理 536
12.11.2 MS Access 7.0数据库 537
12.12 建立一条工具提示 543
第13章 内存管理和DLL 545
13.1 关于内存页的更多问题 545
13.1.1 转换后备缓冲区 546
13.1.2 页边界 548
13.3 堆管理 550
13.2 Malloc()和C运行期库 550
13.4 共享内存 554
13.5 数据拷贝 554
13.6 内存映射文件 557
13.6.1 在进程边界之间共享内存 558
13.6.2 数据文件的访问 569
13.6.3 内存映射文件的释放 573
13.6.4 关于页边界更多的问题 573
13.7 虚拟内存、物理内存和页文件 575
13.8 动态链接库 581
13.8.1 DLL的DEF文件 582
13.8.2 DLL入口点 583
13.8.3 DLL的装载 585
13.8.4 DLL内存管理 586
第14章 多线程、IPC和I/O 588
14.1 线程的建立 589
14.1.1 同步的实现 591
14.1.2 建立一些准则 592
14.1.3 决定线程的数量 594
14.2 线程本地化存储 596
14.3 线程、窗口和消息 598
14.4 线程性能的衡量 604
14.5 用多少线程 606
14.6 线程和用户界面 610
14.6.1 情况A:填写列表框的第二个线程 612
14.6.2 提高第二个线程的优先级 619
14.6.3 情况B:让第二个线程包揽一切 620
14.7 窗口和线程 624
14.8 IPC机制 625
14.8.1 对信号机的理解 626
14.8.2 MUTEX的管理 630
14.8.3 利用事件使线程同步 632
14.8.4 临界区的定义 635
14.9 Wait函数详探 636
14.10 线程的同步 638
14.11 总结 642
15.1 物主绘图列表视窗 643
第15章 Windows高级技术 643
15.2 属性表 653
15.3 向导的建立 668
15.4 子类处理和超类处理 670
15.4.1 对一个编辑窗口进行子类处理 671
15.4.2 子类处理、回调函数和物主绘图 676
15.5 超类处理 677
15.6 关于超类的一些考虑 679
15.7 消息流 681
15.9 建立一个应用程序来载入CPL模块 693
15.10 定制控件的建立 696
15.11 输入控制 700
15.12 圆形的窗口 700
第16章 Win 95外壳的开发 703
16.1 检查任务栏 703
16.2 桌面的深入探索 705
16.2.1 关于复活节彩蛋 707
16.2.2 外壳命名空间 709
16.3 对象的移动、拷贝、删除和更名 740
16.4 最近常用文档的管理 745
16.5 快捷的建立和推敲 746
16.6 发送文档 750
16.7 外壳的挂接 753
16.8 外壳对象和定制应用程序 756
16.8.1 任务栏通知区域 756
16.8.2 深入探索“类” 762
16.8.3 更多的浏览 764
16.9 应用程序栏 765
16.10 拖动至外壳 769
16.11 总结 772
附录A 窗口消息 773
A1 按值排序的窗口消息 773
A2 按名称排序的窗口消息 777
附录B 本书示范程序的安装 782
B1 运行设置程序 782
B2 补充文件 783