序 1
引言 1
第一部分WindowsAPI 1
第1章DLL和API 1
1.1从DOS到Windows 1
目录 1
1.2动态链接库(DLL) 2
1.2.1静态链接 2
1.2.2动态链接 4
1.2.3VisualBasic和DLL 5
1.3应用程序编程接口(API) 5
1.4五花八门的Windows 7
1.4.2无穷无尽的扩展库 8
1.4.1主要的WindowsDLLs 8
1.5变化中的VisualBasic 9
第2章初步认识Windows 10
2.1VisualBasic与Windows的联系 10
2.1.1VisualBasic综述 10
2.1.2Windows综述 11
2.1.3将VisualBasic的概念转换到Windows里 11
2.2深入Windows内部 12
2.2.1什么是窗口? 12
2.2.2窗口属于不同的类 12
2.2.3窗口有样式 14
2.2.4其他窗口属性 15
2.2.5窗口函数 16
2.2.6超类和VisualBasic控件 17
2.2.7VisualBasic与Windows的关系回顾 22
2.3Windows里的图形输出 22
2.3.1图形设备接口 23
2.3.2设备场景 23
2.3.3内存设备场景 25
2.4对象的句柄 25
2.5接下去做什么 27
第3章VisualBasic-Windows接口 28
3.1声明语句 28
3.2Unicode、ANSI和别名 29
3.2.1VisualBasic、ANSI和Unicode 30
3.2.2访问适当的函数 32
3.2.3API调用结果 33
3.3DLL参数 33
3.3.1参数列表 33
3.3.2DLL参数类型和记号法 35
3.3.3参数类型入门 37
3.3.48位数值参数 37
3.3.516位数值参数 38
3.3.632位数值参数 39
3.3.7货币参数 40
3.3.8浮点参数 40
3.3.9变体 41
3.3.10句柄(Windows对象) 41
3.3.11对象(VisualBasic和OLE) 41
3.3.12旗标与位域 42
3.3.13字符串 45
3.3.14数值指针 46
3.3.15结构指针 47
3.3.16数组指针 48
3.3.17函数指针 49
3.3.18能接收多种类型的参数 50
3.4API/DLL调用是如何工作的 51
3.4.1堆栈帧 51
3.4.2返回值 54
3.4.3理论之外的东西 55
4.1.1“类型安全”声明 56
4.1API编程技术 56
第4章实际的API编程 56
4.1.2发送消息 57
4.1.3模块化编程 58
4.1.4API声明文件及工具 58
4.2将API文件转换到VisualBasic 60
(第1部分——函数) 60
4.3为16和32位平台编写程序(仅适用于VB4) 65
4.3.1条件编译 66
4.3.2要区分平台的编码 68
4.3.3示例:专用初始化文件 68
(修订版) 68
4.3.4条件编译无效时怎么办 77
4.4.1发生了变化的函数 78
4.4移植现有的16位代码 78
4.4.2弃之不用的函数 79
4.4.3消息的移植 80
4.4.4与向Windows体系的过渡有关的移植问题 82
4.5将API文件转换到VisualBasic(第2部分——文件与结构) 82
4.5.1示例:TrueType字体浏览器 82
4.5.2移植时要注意的问题 96
4.6API代码的调试 96
4.7接下去做什么 99
第二部分WindowsAPI函数 101
第5章Windows控件与信息函数 101
5.1矩形和画点函数 101
5.1.1RECT结构 101
5.1.2POINTAPI结构 102
5.1.3矩形函数与RectPlay示例 105
5.2Windows控件与信息函数 116
5.2.1窗口级别与标识函数 116
5.2.2窗口位置与大小函数 119
5.2.3窗口信息函数 121
5.2.4输入焦点、前台与输入状态 121
5.2.5Statevw示例 124
5.3其他窗口函数 130
5.4窗口样式索引 153
5.4.1对话框样式 160
5.4.2对进一步实践的建议 160
5.5函数索引 160
6.1.1指针剪切 195
第6章硬件及系统函数 195
6.1鼠标、指针和插入符函数 195
6.1.2指针位置 196
6.2其他鼠标及指针函数 196
6.3键盘和其他输入函数 198
6.3.1字符集重述 198
6.3.2扫描码和虚拟键 199
6.3.3虚拟键码 201
6.3.4地方 203
6.3.5输入控制函数 204
6.4时间函数 205
6.5系统信息和控制函数 206
6.6.1Syslnfo的使用 210
信息观察器 210
6.6示例:Syslnfo——一个系统 210
6.6.2项目说明 211
6.7模拟击键和鼠标事件 227
6.8函数索引 238
第7章设备场景 286
7.1设备场景入门 286
7.1.1设备场景背后的机理 286
7.1.2剪裁 287
7.1.3坐标转换 288
7.1.4深入设备场景 288
7.2设备场景的使用 290
7.2.1获得设备场景 291
7.2.3在VisualBasic中使用设备场景 292
7.2.2设备场景属性 292
7.3设备场景信息函数 295
7.4缩放和坐标系统 299
7.4.1逻辑坐标和设备坐标 299
7.4.2映射模式 301
7.4.3窗口和视口——范围和起点 301
7.4.4世界转换 304
7.4.5Windows坐标系统与VisualBasic 307
7.4.6平台间的差异 307
7.4.7Viewport示例 307
7.5剪裁、区域和其他设备场景函数 326
7.5.2剪裁 327
7.5.1区域 327
7.5.3校验和其他设备场景函数 328
7.5.4对性能的考虑 329
7.5.5示例:Region 329
7.6函数索引 342
第8章绘图函数 373
8.1图形输出综述 373
8.2GDI绘图对象 374
8.2.1绘图对象的创建 374
8.2.2GDI对象的选定和删除规则 375
8.2.3画笔 376
8.2.4刷子 376
8.2.5GDI对象和VisualBasic 377
8.3绘图属性 378
8.3.1线光栅操作 379
8.3.2背景模式 379
8.3.3当前位置 379
8.4绘图函数 380
8.5路径 381
8.6综合运用:按例学习 383
8.6.1示例:Path.vbp 383
8.6.2示例:ExtPen.vbp 391
8.6.3示例:Bezier.vbp 402
8.7图元文件 408
8.8综合运用Ⅱ:其他例子 410
8.8.2使用QuikDraw 411
8.8.1示例:QuikDraw——一个简单的绘图程序 411
8.8.3示例:Analyze——深入图元文件内部 442
8.9函数索引 450
第9章位图、图标和光栅运算 496
9.1位图 496
9.1.1像素的显示 497
9.1.2颜色与设备调色板 497
9.1.3与设备有关的位图 501
9.1.4颜色转换 504
9.1.5在VisualBasic里使用位图 504
9.2与设备无关的位图 505
9.2.1动态调整大小的结构 505
9.2.2DIB结构 507
9.2.3DIBSection 509
9.3图标与指针 511
9.4光栅运算 513
9.5示例 515
9.5.1StockBMs——固有位图和图标观察器 515
9.5.2ROPTest——光栅运算试验程序 521
9.5.3Puzzle——分裂位图还原程序 532
9.5.4DIBSect——演示如何使用DIBSection对象 550
9.6函数索引 558
第10章菜单的使用 580
10.1深入菜单系统 580
10.1.1Windows菜单的工作原理 580
10.1.2标准和扩展菜单 583
工作的 584
10.1.3VisualBasic菜单是如何 584
10.2在VB里使用菜单API函数 587
10.2.1创建定制的复选符号 587
10.2.2用位图定制菜单 587
10.2.3追踪弹出式菜单 588
10.2.4创建VB菜单控件池 588
10.2.5菜单、系统菜单和子类 589
10.2.6获取与VB菜单结构有关的信息 589
10.3示例 589
10.3.1MenuLook——菜单结构观察器 589
10.3.2SysMenu——演示系统和上下文关联菜单 613
10.4函数索引 618
11.1.1字体入门 635
11.1字体的使用 635
第11章文本和字体 635
11.1.2理解字体属性 637
11.2字体宽度 637
11.3字体大小 638
11.4字体家族 640
11.5字符集 641
11.6发音符、连字和Kashida 642
11.7创建逻辑字体 643
11.8GDI字体映射 643
11.9字体信息函数 644
11.10添加和删除字体 644
11.11TEXTMETRIC和NEWTEXTMETRIC结构字段 646
11.12.1文字的描绘过程 648
11.12文字的描绘 648
11.12.2文本范围及对齐 649
11.13示例 649
11.13.1FontView示例 649
11.13.2TextDemo示例 661
11.13.3DrawText.vbp示例 667
11.13.4EnmFntX示例 669
11.14函数索引 676
第12章打印 696
12.1在Windows里打印 696
12.1.1打印机设备场景 696
12.1.2Win32打印子系统 697
12.1.4打印顺序 699
12.1.3打印机的配置 699
12.2打印和VisualBasic 702
12.2.1兼容问题 702
12.2.2打印机配置与VisualBasic 703
12.2.3驱动程序的问题 703
12.3打印机设置及DEVMODE结构 703
12.4对后台打印程序的控制 706
12.5示例 710
12.5.1PicPrint——打印一幅位图,并显示打印机的配置 710
12.5.2DocJob.vbp——将输出导向至打印机 729
12.5.3Spooler.vbp——使用API函数的另一种形式 732
12.6函数索引 741
第13章文件处理 772
13.1应该用什么类型的文件访问? 773
13.1.1专用的初始化文件 773
13.1.2系统注册表 773
13.1.3专用文件格式 774
13.1.4数据库 774
13.1.5OLE结构化存储 774
13.2初始化文件 774
13.3系统注册表 776
13.4文件和目录处理 779
13.4.1Win32文件函数 780
13.4.2对压缩文件的操作 783
13.5文件映射(是文件,还是内存?) 784
何在? 785
13.5.1内存映射文件的重要性 785
13.5.2内有映射文件到底重要在哪里? 786
13.6版本标记 787
13.6.1版本标记与VisualBasic 787
13.6.2版本资源数据结构 787
13.7示例 791
13.7.1FileDemo——初始化文件、注册表和版本标记演示程序 792
13.7.2CkServe/CkClient——协作式应用程序 802
13.7.3Disk.vbp——磁盘剩余空间工具 814
13.8函数索引 820
第14章进程与线程 881
14.1进程、线程与实例 881
14.1.1有关多任务的情况 881
14.1.2任务、进程与同步 883
14.1.3线程 884
14.1.4实例 885
14.2系统与同步对象 886
14.2.1使用系统对象 886
14.2.2Mutex、信号机、事件和侍服式记时器 888
14.2.3同步与VisualBasic 891
14.3应用程序的启动 892
14.3.1进程与线程对象 892
14.3.2判断其他应用程序何时关闭 894
14.4进程间通信 895
14.4.1管道 895
14.4.2邮路 897
14.5.1ckServe/ckClient:协作式应用程序重述 898
14.5示例 898
14.5.2Launch.vbp:启动应用程序 902
14.5.3dwWatch.vbp:与OLE回调同步 909
14.5.4PipeSrc.vbp/PipeDest.vpb:匿名管道示例 916
14.5.5PipeClnt.vbp/PipeSrv.vpb:命名管道示例 923
14.5.6PipeClnt.vbp示例 929
14.6函数索引 932
第15章内存、字符串、结构及资源 967
15.1内存和字符串 967
15.1.1用VisualBasic创建缓冲区 967
15.1.2用Windows创建缓冲区 968
15.1.3在VisualBasic里使用全局内存块 973
15.1.4字符串函数 975
15.2VisualBasic和Windows接口:核心版本 976
15.2.1高级结构技术 977
15.2.2结构中的固定串 980
15.2.3结构中的动态串 980
15.3资源 985
15.3.1资源与Windows应用程序 985
15.3.2资源与VisualBasic 987
15.3.3资源API函数 987
15.4原子与属性 989
15.4.1原子 989
15.4.2属性函数 990
15.5函数索引 991
16.1.1Windows事件消息 1027
16.1消息控制 1027
第16章常见的Windows消息 1027
第三部分Windows消息 1027
16.1.2执行操作的消息 1028
16.1.3消息组织 1028
16.1.4发送消息 1029
16.1.5消息参数 1030
16.1.6能返回值的消息 1030
16.1.7注册消息 1030
16.1WM_COMMAND消息 1031
16.2对VisualBasic有用的消息 1031
16.3VisualBasic和子类 1032
16.4函数索引 1034
16.5消息索引 1039
17.1.1撤消功能 1073
17.1.2文本格式化 1073
第17章编辑控件消息 1073
17.1文本控件 1073
17.1.3选定与显示 1074
17.2示例:TextMsgs——编辑控件消息的演示 1075
17.2.1使用TextMsgs 1076
17.2.2项目说明 1076
17.2.3窗体说明 1076
17.2.4TextMsgs程序清单 1079
17.3通告消息(编辑控件) 1083
17.4编辑控件消息 1085
18.1.1选定和数据消息 1094
18.1列表控件 1094
第18章列表框、组合框和按钮消息 1094
18.1.2显示消息 1095
18.2组合框控件 1096
18.3按钮控件 1098
18.4通知消息(列表、组合框、按钮) 1098
18.5组合框控件消息 1101
18.6列表框控件消息 1105
18.7按钮控件消息 1115
第四部分API编程实践 1117
第19章在VB里使用API调用——软件设计中的权衡 1117
19.1用WindowsAPI改善性能 1117
19.1.1性能评测 1117
19.1.2性能评测示例:VisualBasic与基于API的图形 1122
19.2使用WindowsAPI时要功能与安全兼顾 1124
19.3设计选择 1129
19.3.1比较 1130
19.3.2问题 1131
19.4在实践中学习 1132
第20章构建API类库 1134
20.1类库设计 1134
20.1.1API类库的设计标准 1134
20.1.2类的选择 1135
20.2类库的实现 1137
20.2.1函数名和参数 1137
20.2.2结构的封装 1138
20.2.3对象的封装 1140
20.2.4常数的运用 1143
20.2.5出错控制 1145
20.2.6综合运用:dwDeviceContext类 1145
20.3使用类库 1148
20.3.1使用dwRECT 1148
20.3.2使用dwWindow 1149
20.3.3使用dwSystem类 1149
20.3.4使用dwDeviceContext 1150
第21章串行通信 1152
21.1串行通信入门 1152
21.1.1串行数据格式 1153
21.1.3DTEandDCE 1154
21.1.2TheRS-232Standard 1154
21.1.4数据信号 1155
21.1.5流控制 1156
21.2Windows串行通信驱动程序 1156
21.2.1串行驱动程序的结构 1156
21.2.2使用串行驱动程序 1157
21.2.3串行驱动程序的事件 1158
21.2.4“中断”状态 1158
21.2.5通信驱动程序和并行端口 1159
21.2.6配置串行端口和设备控制块 1159
21.2.7了解串口状态 1159
21.2.8串行驱动程序API函数 1159
21.4函数索引 1160
21.3示例:CommDemo——一个简单的终端程序 1160
第22章网络函数 1169
22.1Windows与网络 1169
22.2WNet函数和类 1170
22.2.1类结构 1170
22.2.2网络错误控制 1171
22.3枚举网络资源 1172
22.3.1dwNetResource类 1174
22.3.2声明、数据和初始化 1174
22.4示例:Treenet.vbp——一个网络浏览实用程序 1178
22.5函数索引 1178
第23章API类型库 1186
23.1什么是类型库? 1186
23.2ODL文件语法 1188
23.2.1结构声明 1189
23.2.3枚举定义 1190
23.2.4常数和函数定义 1190
23.3类型库的优缺点 1191
23.4DesawareAPI类型库 1191
第五部分附录 1193
附录A使用回调、APIGID32.DLL、 1193
dwcbk32d.ocx和desbc32d.ocx 1193
附录BWindows数据结构 1205
附录CWindows文件格式 1206
附录DVisualBasic→DLL调用转换: 1210
技术性总结 1210
附录E光栅运算表 1216