第一部分 Windows开发的基本概念 7
第1章 Windows基础 7
1.1 模块:应用程序和库 8
1.1.1 实例/模块==窗口/类 9
1.1.2 应用程序 10
1.1.3 动态连接库 11
1.2 Windows的以库为基础的结构 12
1.2.1 GDI 13
1.2.2 User 14
1.2.3 内核(Kernel) 14
1.2.4 设备驱动程序 15
1.3 关于消息及消息的产生与处理 15
1.3.1 窗口函数 17
1.3.2 消息 19
1.3.3 处理队列中的事件 20
1.3.4 缺省的消息处理 22
1.3.5 投递与发送消息 23
1.3.6 消息与多任务 25
1.3.7 用户定义的消息 27
1.3.8 消息优先级与队列优化 28
1.3.9 消息的次序 28
1.3.10 窗口消息与通知消息 29
1.3.11 通过消息仿真函数 30
1.3.12 无窗口的应用程序 30
1.4 Windows中的面向对象概念 32
1.4.1 类和对象 33
1.4.2 继承 34
1.4.3 数据封装/抽象 35
1.4.4 动态联编(Dynamic Binding) 36
1.5 总结 36
第2章 处理器与内存基础 37
2.1 分段内存模式 39
2.2 PC内存类型 40
2.2.1 常规内存 40
2.2.2 扩充内存 41
2.2.3 扩展内存 42
2.3 内存管理驱动程序 42
2.3.1 DOS 42
2.3.2 EMS 43
2.3.3 XMS 43
2.3.4 VCPI 43
2.3.5 DPMI 43
2.4 实模式与保护模式 44
2.4.1 虚拟机器 45
2.4.2 实模式 46
2.4.3 标准模式 47
2.4.4 增强模式 47
2.4.5 小框架和大框架的EMS模式及内存转储 48
2.5 虚拟的、逻辑的、线性的和物理的:地址和地址空间 50
2.6 段和寄存器 53
2.7 对齐 53
2.8 选择器、描述器和描述器表 54
2.8.1 选择器 54
2.8.2 描述器 56
2.8.3 描述器表 57
2.9 IVT和IDT 59
2.10 中断和异常 59
2.11 保护 60
2.12 多任务 61
2.13 总结 63
第3章 程序和模块基础 64
3.1 程序段 65
3.1.1 代码段 67
3.1.2 数据段 67
3.1.3 资源段 69
3.1.4 任务段(动态分配数据段) 69
3.2 程序寄存器 70
3.3 堆栈 72
3.4 程序的初始化和清理 73
3.5 C和Windows运行库 74
3.6 模块的装载进程 74
3.6.1 模块数据库 75
3.6.2 任务数据库 76
3.7 动态链接和.EXE头 77
3.7.1 前置和后续代码 81
3.7.2 堆栈框 85
3.8 进程间的和进程内的通讯 86
3.9 选择内存模式 88
3.9.1 近、远和巨型指针 89
3.10 程序的数据存储 90
3.10.1 静态数据(全局变量) 91
3.10.2 自动数据(局部变量) 91
3.11 模块定义文件 92
3.12 Make文件 96
3.13 编译器和链接器选择 98
3.13.1 编译器 98
3.13.2 链接器 99
3.14 关键词 100
3.15 保留的数据类型/公共的定义 101
3.16 语言实现结果 103
3.16.1 命名约定 103
3.16.2 调用约定 104
3.16.3 参数传递 104
3.16.4 类型强制和升级 104
3.17 总结 105
第4章 内存管理 106
4.1 多个内存管理的层(块、堆和智能) 106
4.2 Windows堆管理器 108
4.3 内存对象的生命周期 109
4.4 固定的和可移动的内存 110
4.5 可丢弃的和不可丢弃的内存 113
4.6 压缩 115
4.7 释放内存 115
4.8 重定义/重分配段 116
4.9 获取段和内存管理器的信息 116
4.10 解决内存紧张问题 120
4.11 “疲劳”管理 122
4.12 锁定和解锁内存 123
4.13 固定的、在线的和页锁定段 124
4.14 全局堆 125
4.15 局部堆 128
4.16 多个局部堆(子段分配) 129
4.17 原子 131
4.18 资源 132
4.18.1 获取有资源的资源 134
4.18.2 串表 137
4.19 对象、句柄和间接 139
4.20 Heap Walker 142
第5章 库设计思想 146
5.1 库与应用程序有什么不同 146
5.2 名和序数 147
5.3 动态链接、对象和输入库 148
5.4 装载库 149
5.4.1 隐含装载的DLL 149
5.4.2 明确装载的DLL 150
5.4.3 动态装载的DLL 151
5.5 LibEntry()和LibMain() 152
5.6 所有有关WEP()的信息 154
5.6.1 调试启动和终止代码 155
5.7 为多个DLL建立单个输入库 157
5.8 删除C运行函数 157
5.9 建立只有资源的DLL 158
5.10 建立没有数据段的DLL 159
5.11 截取API调用 160
5.12 建立钩子/滤波器库 161
5.13 使用DLL来支持窗口类 167
第6章 对话框和定制控制设计 170
6.1 窗口类型 170
6.2 窗口类 172
6.3 窗口 174
6.3.1 类/窗口附加数据 175
6.3.2 窗口属性 176
6.3.3 窗口状态 177
6.3.4 模式 177
6.3.5 活动的和不活动的窗口 178
6.3.6 允许和禁止窗口 178
6.3.7 可见的和隐藏的窗口 178
6.3.8 焦点 179
6.4 对话框 179
6.4.1 滚动对话框 180
6.4.2 对话框消息 180
6.5 控制和子窗口 187
6.6 跟踪消息流 189
6.6.1 消息顺序的快速回顾 193
6.7 设计定制控制 193
6.8 在窗口中使用颜色 194
6.8.1 擦除和绘制窗口 197
6.8.2 使用文本及字体 199
6.9 改变库存控制的颜色 200
6.9.1 给控制增加标号 202
6.10 绘制消息和队列 204
6.11 放置显示描述表到描述表中 205
6.11.1 为打印机重新获取设备描述表 208
6.11.2 重新得到内存显示描述表 208
6.11.3 使用信息描述表 208
6.11.4 公共的设备描述表函数 209
6.12 非客户区域 210
6.12.1 非客户区消息 211
6.12.2 忽略缺省操作 215
6.13 界面设计 218
6.13.1 按钮 221
6.13.2 组合框 221
6.13.3 编辑控制 223
6.13.4 列表框 224
6.13.5 滚动条 225
6.13.6 静态 225
6.14 连接控制到对话编辑器 226
6.15 放大(ZoomIn) 228
6.16 Spy 228
6.17 窗口尺寸、设置大小和坐标系 229
6.18 窗口列表和定位(z-顺序) 230
6.19 总结 234
第二部分 附录 237
附录A TestApp 237
附录B STDWIN 247
附录C 位图 336
附录D 按钮 353
附录E 组合框 376
附录F 编辑 384
附录G 列表框 390
附录H 分裂 405
附录Ⅰ HotApp/HotKey 423