1.3.5面向对象的程序设计 1
第一章Windows编程要素简介 3
1.1 Windows发展史简介 3
目 录 3
1.2用户的观点 4
1.2.1 图形用户界面(GUI) 4
1.2.2 GUI的概念及基本原理 5
1.2.3一致的用户界面 5
1.2.4多任务的优点 6
1.2.5内存管理 7
1.2.6与设备无关的图形界面 7
1.2.7 MS-DOS应用程序 8
1.3.2投入Windows 9
1.3.3函数调用 9
1.3.1 Windows与MS-DOS 9
1.3程序员的观点 9
1.3.4动态链接 10
1.3.6消息驱动式体系结构 11
1.3.7窗口过程 11
1.4编写第一个Windows程序 12
1.4.1传统程序的问题何在 12
1.4.2 HELLOWIN的文件 13
1.4.3 Make文件 17
1.4.4 C源代码文件 19
1.4.5 Windows函数调用 20
1.4.6大写字母标识符 20
1.4.7新的数据类型 21
1.4.8句柄简介 21
1.4.9匈牙利表示法 22
1.4.10程序入口点 23
1.4.11登录窗口类 24
1.4.12创建窗口 26
1.4.13显示窗口 27
1.4.14消息循环 27
1.4.15窗口过程 29
1.4.16处理消息 30
1.4.17 WM_PAINT消息 30
1.4.18 WM-DESTROY消息 31
1.4.19模块定义文件 32
1.5 Windows程序设计难点 32
1.5.1 Windows程序中的调用关系 33
1.5.2进队消息与不进队消息 34
1.5.3无优先级的多任务 35
1.5.4学习策略 35
2.1绘图与刷新 37
第二章文本输出 37
2.1.1 WM_PAINT消息 38
2.1.2有效矩形与无效矩形 38
2.2 GDI简介 39
2.2.1 设备环境 39
2.2.2获取设备环境的方法之一 40
2.2.3绘图信息结构 40
2.2.4获取设备环境句柄的方法之二 42
2.2.5细论TextOut 42
2.2.6 系统字体 43
2.2.7字符大小 44
2.2.8细论文本尺度 45
2.2.9格式化文本 46
2.2.10综合使用 47
2.2.11 SYSMETS1.C窗口过程 52
2.2.12屏幕空间不够 53
2.2.13客户区域的大小 53
2.3滚动条 54
2.3.1滚动条的范围和位置 55
2.3.2滚动条消息 55
2.3.3在SYSMETS中加入滚动功能 57
2.3.4使程序结构化以利于绘图 61
2.3.5建立更好的滚动条 62
2.3.6不用鼠标怎么办 67
第三章键盘 71
3.1键盘基础 71
3.1.1键盘驱动程序 71
3.1.3焦点 72
3.1.2忽略击键 72
3.1.4击键和字符 73
3.2击键消息 73
3.2.1系统与非系统击键 74
3.2.2 IParam参数 74
3.2.3虚拟键代码 76
3.2.4变换状态 78
3.2.5使用击键消息 79
3.3增强系统:增加键盘接口 79
3.3.1加入WM_KEYDOWN逻辑 79
3.3.2发送消息 81
3.4字符消息 87
3.4.1 WM_CHAR消息 89
3.4.2死字符消息 89
3.5浏览键盘消息 90
3.6.1脱字符函数 95
3.6脱字符(非光标) 95
3.6.2 TYPE程序 96
3.7 Windows字符集 103
3.7.1 OEM字符集 103
3.7.2 ANSI 104
3.7.3 OEM、ANSI和字体 105
3.8国际化考虑 105
3.8.1字符集的处理 106
3.8.2关于MS—DOS的讨论 106
3.8.3数字小键盘的使用 107
第四章鼠标 109
4.1鼠标基础知识 109
4.1.1一些简单定义 109
4.2客户区鼠标消息 110
4.2.1简单的鼠标处理:一个例子 111
4.2.2 POINT、RECT和IParam 115
4.2.3 Shift键的处理 116
4.2.4双击鼠标按钮 117
4.3非客户区鼠标消息 117
4.3.1命中测试消息 118
4.3.2消息产生消息 119
4.4用户程序中的命中测试 120
4.4.1一个假想的例子 120
4.4.2示例程序 121
4.4.3用键盘模拟鼠标 124
4.4.4在CHECKER 中加入键盘接口 126
4.4.5子窗口用于命中测试 130
4.4.6 CHECKER中的子窗口 131
5鼠标的俘获 135
4.5.1 BLOWUPl程序 136
4.5.2鼠标光标形状的修改 139
4.5.3 StretchBit调用 140
4.5.4绘制俘获块 141
第五章定时器 143
5.1定时器基础 143
5.1.1 SYSTEM.DRV和Windows定时器 143
5.1.2非异步定时器消息 144
5.2定时器的使用:三种方法 145
5.2.1方法一 145
5.2.2方法二 151
5.2.3方法三 156
5.3状态报告中定时器的使用 156
5.3.1图标的创造性使用 159
5.3.2图标的强制使用 160
5.4定时器在时钟中的应用 161
5.3.3图标的保持 161
5.3.4自由内存的计算 161
5.4.1弹出式窗口的定位和缩放 165
5.4.2日期与时间的获取 166
5.4.3国际化 166
5.5 Windows标准时间 167
第六章子窗口控制 169
6.1按钮类 169
6.1.1建立子窗口 172
6.1.2子窗口向父窗口发信号 174
6.1.3父窗口向子窗口发信号 175
6.1.4压入按钮 175
6.1.5复选框 176
6.1.7分组框 177
6.1.8改变按钮文本 177
6.1.6单选按钮 177
6.1.9可见的和启用的按钮 178
6.1.10按钮和输入焦点 178
6.2控制和颜色 179
6.2.1 系统颜色 179
6.2.2按钮颜色 181
6.2.3 WM_CTLCOLOR消息 181
6.2.4 自绘按钮 183
63静态类 190
6.4滚动条类 191
6.4.1 COLORSl程序 192
6.4.2自动键盘接口 197
6.4.3窗口分组 198
6.4.4给背景着色 199
6.4.5给滚动条着色 200
6.4.6处理多个实例 201
6.4.7 COLORSl作为图标 201
6.5编辑类 201
6.5.1编辑类风格 204
6.5.2编辑控制通知 205
6.5.3使用编辑控制 205
6.5.4发送给编辑控制的消息 206
6.6列表框类 206
6.6.1 列表框风格 207
6.6.2将串放入列表框 208
6.6.3选择和提取条目 209
6.6.4接收来自列表框的消息 210
6.6.5一个简单的列表框应用 210
6.6.6文件列表 214
6.6.7 Windows的head程序 215
6.6.8被浪费的8KB空间 219
第七章内存管理 224
7.1微处理器与内存 224
7.1.1近地址和远地址 225
7.1.2保护模式 226
7.2 Windows中的内存组织 227
7.2.1 固定段和可移动段 228
7.2.2可抛弃内存 228
7.2.3全程内存布局 229
7.2.4局部内存 230
7.3代码段和数据段 231
7.3.1 小、中、压缩、大和巨内存模式 231
7.3.2多个代码段 232
7.3.3关于压缩模式和大模式 233
7.3.5程序段属性 234
7.3.4避免移动问题 234
7.4在程序内分配内存 236
7.4.1锁定用户块 236
7.4.2快速示例 237
7.4.3全程内存函数 238
7.4.4其它全程内存函数 240
7.4.5使用可抛弃的全程内存 241
7.4.6巨型全程内存块 242
7.4.7分配局部内存 243
7.4.8其它局部内存函数 245
7.4.9锁定用户自己的数据段 245
7.4.10内存分配的简单方法 246
7.4.11 C语言内存分配函数的使用 247
第八章图标、光标、位图和字符串 248
8.1编译资源 248
8.2图标和光标 250
8.2.1图象编辑器 254
8.2.2获取图标句柄 256
8.2.3图标的使用 257
8.2.4备用光标的使用 258
8.3资源和内存 258
8.3.1位图:象素组成的图象 259
8.3.2位图和刷子的使用 259
8.4字符串 263
8.4.1字符串资源的应用 264
8.4.2消息框和字符串 264
8.4.3字符串资源和内存空间 265
8.5用户定义的资源 266
9.1菜单 275
9.1.1菜单结构 275
第九章菜单与加速键 275
9.1.2菜单模板 276
9.1.3在程序中访问菜单 279
9.1.4菜单和消息 280
9.1.5程序示例 282
9.1.6菜单格式 288
9.1.7定义菜单的严格方法 288
9.1.8定义菜单的第三种方法 289
9.1.9浮动弹出式菜单 290
9.1.10使用系统菜单 295
9.1.11修改菜单 298
9.1.12其它菜单命令 298
9.1.13创建菜单的其它方法 299
9.2位图菜单 304
9.2.2内存设备环境 312
9.2.1 创建菜单位图的两种方法 312
9.2.3文本位图 313
9.2.4位图的比例缩放 314
9.2.5连接菜单 315
9.2.6加入键盘接口 316
9.3加速键 317
9.3.1 加速键的使用 317
9.3.2安排加速键的几条规则 317
9.3.3加速键表 318
9.3.4加速键表的装入 319
9.3.5键盘代码转换 320
9.3.6接收加速键消息 321
9.3.7菜单与加速键应用程序POPPAD 321
9.3.9处理菜单选项 328
9.3.8启用菜单项 328
第十章对话框 331
10.1模态对话框 331
10.1.1 创建一个“About”对话框 331
10.1.2对话框模板 335
10.1.3对话框过程 337
10.1.4激活对话框 338
10.1.5对话框风格的补充说明 339
10.1.6定义控制的补充说明 341
10.1.7一个更复杂的对话框 342
10.1.8使用对话框控制 348
10.1.9 OK和Cancel按钮 351
10.1.10 Tab和组 352
10.1.11 在对话框上画图 354
10.1.12使用对话框的其它函数 354
10.1.13 定义自己的控制 355
10.2消息框 361
10.2.1 弹出信息 362
10.3非模态对话框 363
10.3.1模态对话框与非模态对话框的区别 363
10.3.2新COLORS程序 365
10.3.3HEXCALC:窗口还是对话框 370
10.3.4创造性地使用控制ID 376
10.4对文件的操作 377
10.4.1推荐的方法 377
10.4.2 Windows文件I/O函数 378
10.4.3在POPPAD中加入文件处理 380
10.4.4查找与替换 399
10.5只有一个函数调用的Windows程序 400
11.1 GDI基本原理 405
第十一章GDI简介 405
11.2设备环境 406
11.2.1获取设备环境的句柄 406
11.2.2获取设备环境信息…………………………………………………………(40a)11.2.3 DEVCAPSl程序 408
11.2.4设备的大小 419
11.2.5获取颜色信息 421
11.2.6设备环境属性 422
11.2.7保存设备环境 423
11.3映射方式 424
11.3.1设备坐标和逻辑坐标 426
11.3.2设备坐标系统 426
11.3.3视口和窗口 426
11.3.4 WM-TEXT映射方式 428
11.3.5“度量”映射方式 430
11.3.6“自作主张的”映射方式 433
11.3.7 WHATSIZE程序 438
第十二章绘制图形 443
12.1 画点 443
12.2画线 443
12.2.1 使用后援画笔 445
12.2.2画笔的创建、选择和删除 446
12.2.3避免与设备相关 449
12.2.4填充空隙 450
12.2.5绘图方式 450
12.2.6 ROP2LOOK程序 451
12.2.7 ROP2与颜色 455
12.3画填充区域 456
12.3.1边界框 457
12.3.2 ARCS程序 461
12.3.3饼状图的三角学 466
12.3.4 Polygon函数和多边形填充方式 468
12.3.5用刷子填充内里 468
12.3.6刷子和位图 471
12.3.7位图刷子的创建与使用 472
1 2.3.8刷子的对齐 475
12.4矩形、区域和剪取 477
12.4.1矩形函数 477
12.4.2区域的创建和绘制 479
12.4.3矩形与区域的剪取 480
12.4.4 CLOVER程序 481
12.5其它GDI函数 485
12.6不停地画图的程序 490
13.1颜色和位图 497
13.2与设备无关的位图(DIB) 497
第十三章位、块传输和元文件 497
13.2.1 DIB文件 498
13.2.2压缩DIB 内存格式 499
13.2.3显示DIB 500
13.2.4创建DIB 507
13.3 GDI位图对象 507
13.3.1在程序中创建位图 508
13.3.2单色位图格式 509
13.3.3彩色位图格式 510
13.3.4位图的尺寸 511
13.4内存设备环境 511
13.5强大的BLT 512
13.5.1PatBlt函数 512
13.5.2 Blt坐标 515
13.5.3用BitBlt传输位 516
13.5.4 DrawBitmap函数 517
13.5.5使用不同的ROP码 518
13.5.6再论内存设备环境 520
13.5.7颜色转换 523
13.5.8映射方式转换 524
13.5.9用StrechBlt伸展位图 524
13.5.10动画 525
13.6元文件 529
13.6.1 内存元文件的简单应用 529
13.6.2将先文件存放在磁盘上 531
13.6.3使用预先存在的元文件 532
13.6.4将元文件用作资源 534
13.6.5细论元文件 538
13.6.6元文件能做的与不能做的 539
14.1简单的文本输出 541
14.1.1文本输出函数 541
第十四章文本和字体 541
14.1.2文本的设备环境属性 543
14.1.3使用后援字体 544
14.1.4输出灰色字符串 545
14.1.5 GrayString的简单用法 547
14.1.6不用GrayString显示灰色串 547
14.2字体的基础知识 547
14.2.1字体的类型 547
14.2.2主题之一:系列与字型 550
14.2.3字体资源文件 552
14.2.4主题之二:获取点 554
14.2.为什么使用逻辑英寸 555
14.2.6主题之三:行空和间距 555
14.2.7“逻辑twips”映射方式 556
14.3逻辑字体的创建、选择和删除 557
14.3.1 PICKFONT程序 559
14.3.2逻辑字体结构 568
14.3.3字体映射算法 571
14.3.4查明字体信息 572
14.4枚举字体 574
14.5格式化文本 585
14.5.1单行文本的对齐 586
14.5.2处理段落 587
14.6字体的POPPAD 595
第十五章使用打印机 599
15.1 打印、缓冲和转义 599
15.2打印机设备环境 602
15.2.1获取CreateDC参数 602
15.2.2修改后的DEVCAPS程序 604
15.2.3 DeviceMode调用 611
15.2.4检查BitBlt能力 612
15.3打印原理 613
15.3.1 Escape函数 613
15.3.2 FORMFEED程序 614
15.4打印图形和文本 616
15.4.1Bare-Bones打印 619
15.4.2设置终止过程 621
15.4.3Windows如何使用AbortProc 622
15.4.4实现终止过程 623
15.4.5增加一个打印对话框 626
15.4.6增加POPPAD的打印功能 630
15.4.7处理错误码 635
15.5打印分块技术 637
15.5.1形成打印块 638
15.5.2终止过程的不同应用 640
15.6打印机和字体 645
第十六章剪辑板 649
16.1剪辑板的简单使用 649
16.1.1标准剪辑板数据格式 649
16.1.2把文本传送到剪辑板 650
16.1.3从剪辑板上获取文本 651
16.1.4剪辑板的功能 652
16.1.5打开和关闭剪辑板 653
16.1.6使用位图剪辑板 653
16.1.7修订后的BLOWUP程序 653
16.1.8元文件和元文件图片 659
16.2复杂的剪辑板应用 663
16.2.1利用多个数据项 664
16.2.2延迟再生 665
16.2.3私有数据格式 666
16.3实现剪辑板浏览器 668
16.3.1剪辑板浏览器链 668
16.3.2剪辑板浏览器函数和消息 668
16.3.3一个简单的剪辑板浏览器 671
第十七章动态数据交换(DDE) 675
17.1基本概念 675
17.1.1应用程序、主题和项 676
17.1.2交谈的类型 676
17.1.3字符串和原子 680
17.2一个DDE服务器程序 682
17.2.1 DDEPOP1问题 695
17.2.2 WM_DDE_INTIATE消息 696
17.2.3 ServerProc窗口过程 696
17.2.4 WM_DDE-REQUEST消息 697
17.2.5 DDEPOP1的PostDataMessage函数 698
17.2.6 VWM_DDE-ADVISE消息 699
17.2.7更新数据项 700
17.2.8 WM_DDE-UNADVISE消息 701
17.2.9 WM_DDE_TERMINATE消息 701
17.3 DDE客户程序 701
17.3.1 启动DDE交谈 709
17.3.2 WM_DDE_DATA消息 710
17.3.3 WM_DDE-TERMINATE消息 711
17.4 DDE管理库 711
17.4.1 概念上的差异 711
17.4.2 DDE的DDEML方式 712
第十八章 多文档界面 725
18.1 MDI的组成 725
18.2 WIDOWS 3和MDI 726
18.3示例程序 727
18.3.1 三个菜单 739
18.3.2程序初始化 739
18.4创建子窗口 741
18.5多框架窗口消息处理 741
18.6子文档窗口 742
18.7清除 743
18.8窗口过程的功能 744
第十九章动态链接库 745
19.1库的基本要素 745
19.1.1库:一词多义 746
19.1.2用EXEHDR检验库 746
19.2 STRPROG和STRLIB 747
19.2.1 make文件的区别 748
19.2.2 STRLIB库 749
19.2.3库入口 752
19.2.4动态链接库复位 753
19.2.5 C++换名和DLL 753
19.2.6STRLIB函数 754
19.2.7库模块定义文件 754
19.2.8 STRPROG程序 755
19.2.9运行STRPROG 760
19.2.10远程函数入口 761
19.2.11 回调函数的使用 762
19.3 DS!=SS 763
19.4对库的其它限制 766
19.5规定链接的不同方法 767
19.6使用输入库 768
19.7不带输入的动态链接 770
19.8纯资源库 771