第一章 分析一个窗口 1
1.1 注册一个窗口类 1
1.2 其它的类型 1
1.2.1 系统全局类 1
1.2.2 应用程序全局类 2
1.2.3 应用程序局部类 2
1.2.4 同名的窗口类 2
1.3 窗口类的各部分 3
1.4 Windows如何存储窗口类 4
1.5 创建和删除窗口事例 7
1.6 窗口风格 8
1.6.1 Windows如何存储窗口事例 10
1.7 窗口特性 13
1.8 窗口消息 15
1.8.1 消息的种类 15
1.8.2 类定义的整型数消息 15
1.8.3 系统全局字符串消息 16
1.9 暗中观察窗口 17
1.9.1 Voyeur的初始化 18
1.9.2 初始化Statisties对话框 19
1.9.3 Peering into Window 21
1.9.4 更新对话框 23
1.9.5 冻结对话框信息 24
1.9.6 绘制窗口边框 25
1.9.7 设置类和窗口信息 26
1.9.8 填充风格列表框 27
第二章 子类化和超类化窗口 47
2.1 怎样进行窗口子类化 47
2.2 窗口子类化要求的限制条件 50
2.3 程序管理器还原程序 51
2.3.1 PM Restore怎样运行 51
2.3.2 WinMain函数 52
2.3.3 改变程序管理器的菜单 54
2.4 过程事例 55
2.4.2 PMSubClass函数和消息的捕获 58
2.4.1 回到原来的话题 58
2.4.3 AnyAppsRunning函数 61
2.4.4 运行PM Restore 61
2.5 怎样进行窗口超类化 68
2.6 一个窗口超类化的例子 73
2.7 窗口超类化程序包:SUPERCLS.C 73
2.8 应用程序:NOALPHA.C 76
2.8.1 初始化应用程序 76
2.8.2 超类窗口过程 77
2.8.3 对话框函数 78
第三章 对话框技术 93
3.1 SetWindowPos对话框 94
3.2 Options对话框 97
3.2.1 设计对话框 97
3.2.2 对话框函数 99
3.2.3 ShowArea函数 100
3.3 非模式对话框 102
3.3.1 使用非模式对话框 103
3.3.2 非模式对话框怎样工作 105
3.4 动态对话框 106
3.4.1 建立对话框样板 111
3.5 管理对话框样板内存块 114
3.6 模式选择对话框 114
3.6.1 解法1:模式对话框中的非模式对话框 116
3.6.2 解法2:使用SetParent函数 116
3.6.3 最终解法:强行方法 119
第四章 设计自定义子控制 165
4.1 设计自定义子控制的规则 166
4.2 实现Meter控制 169
4.2.1 设计Meter控制的程序员界面 169
4.2.2 实现Meter控制代码 170
4.2.3 子控制的一些特殊消息 172
4.2.4 绘制Meter控制 174
4.3 简化的旋转按钮(spin button) 182
4.3.1 设计旋转按钮程序员界面 182
4.3.2 实现旋转按钮源代码 184
4.3.3 绘制Spin Button控制 184
4.3.4 使用旋转按钮修改一个值 186
4.3.5 滚动旋转按钮 188
4.4 自定义子控制与Microsoft的对话框编辑器结合 196
4.4.1 准备对话框编辑器 196
4.4.2 在自定义控制中添加对话框编辑器支持函数 198
4.4.3 ClassInfo函数 199
4.4.4 ClassStyle和ClassDlgFn函数 201
4.4.5 ClassFlags函数 207
4.5 在应用程序中使用自定义控制 221
5.1 Windows怎样管理打印机 229
第五章 设置打印机 229
5.1.1 打印机设备驱动程序 234
5.1.2 DEVMODE结构和打印机环境 237
5.1.3 打印机环境 241
5.1.4 ExtDevice Mode函数 242
5.1.5 向打印机输出 245
5.1.6 获得打印机专有信息 246
5.1.7 打印机驱动程序的演变 247
5.2 打印和打印设置公用对话框 248
5.3 打印机设置实例应用程序 253
第六章 任务和队列 263
6.1 任务及其句柄 263
6.1.1 前景 267
6.2 应用程序队列 267
6.3 系统和应用程序队列 270
第七章 钩 279
7.1 钩的基本知识 280
7.2.1 WH_CALLWNDPROC和WH_GETMESSAGE钩 285
7.2 从链中删除一个过滤函数 285
7.2.2 WH_KEYBOARD钩 286
7.2.3 WH_MOUSE钩 287
7.2.4 WH_HARDWARE钩 288
7.2.5 WH_SYSMSGFILTER和WH_MSGFILTER钩 289
7.2.6 WH_JOVRNALRECORD和WH_JOVRNALPLAYBACK钩 292
7.2.7 WH_SHELL钩 296
7.2.8 WH_CBT钩 297
7.2.9 WH_DEBUG钩 300
7.3 屏幕刷新实用例程 301
7.4 Echo应用程序(一个宏记录程序) 316
7.4.1 记录和重演事件 316
7.4.2 请求帮助 318
第八章 MDI应用程序技术 335
8.1 MDI应用程序基础 335
8.2 MDI实用应用程序 341
8.3 关闭MDI子窗口 342
8.4 吞噬鼠标消息 345
8.5 状态条 348
8.6 菜单选项帮助 351
8.7 自定义平铺 361
8.8 实现一个带状条(Ribbon) 366
8.9 关闭MDI应用程序 370
第九章 实现拖放 423
9.1 成为一个拖放文件客户(Dropfile Client) 426
9.2 怎样工作 427
9.3 Burnlt 429
9.4 成为一个拖放文件服务器(Dropfile Server) 435
9.5 拖放文件服务器实例 440
9.6 拖放的其它用法 450
9.7 下一步做些什么 451
第十章 安装商用应用程序 453
10.1 设计设置程序 453
10.2 Microsoft的设置程序支持 454
10.3 版本控制 458
10.4 将版本控制和还原结合起来 468
10.5 对设置程序特别要注意的几点 474
10.6 Setup应用程序 477
10.6.1 SETUP.INF文件 478
10.7 与程序管理进行动态数据交换 489
10.7.1 向程序管理器发送命令 492
10.7.2 终止DDE会话 494
附录A 确定应用程序所需的堆栈尺寸 543
附录B 访问类和窗口额外字节 546
附录C BUILTINS.JMR文件 549