译者序 1
作者简介 1
致谢 1
前言 1
第一部分 Windows2000编程基础知识 1
第1章 应用程序基础 1
1.1 Win32应用程序 1
1.1.1 传统的Win32应用程序 2
1.1.2 Win32控制台应用程序 2
1.1.3 动态链接库 3
1.1.4 ActiveX控件 3
1.2 Windows 编程的艰苦方法 5
1.3.1 初始化应用程序 11
1.3 MFC与C的对比 11
1.3.2 MFC的消息处理 12
1.4 本章小结 15
第2章 图形设备接口的基本知识 16
2.1 GDI简介 17
2.2 设备描述环境 17
2.3 绘图设备描述环境 19
2.3.1 客户区的设备描述环境 21
2.3.2 图元文件的设备描述环境 26
2.4 设备能力 30
2.5 CPen类 32
2.6 CBrush类 35
2.7 本章小结 40
第3章 窗口和对话框 41
3.1.2 CCmdTarget类 42
3.1.1 CObject类 42
3.1 MFC窗口基类 42
3.1.3 CWnd类 43
3.2 框架和视图窗口 45
3.2.1 CFrameWnd类 45
3.2.2 CView类 46
3.3 窗口基础:不使用AppWizard而创建应用程序 47
3.3.1 创建BasicApp应用程序 47
3.3.2 理解BasicApp应用程序 52
3.4 窗口样式 55
3.4.1 创建窗口样式 56
3.4.2 在非MFC程序中的窗口样式 58
3.5 MDI窗口 61
3.6 对话框 63
3.7.1 文件对话框 69
3.7 通用对话框 69
3.7.2 字体对话框 73
3.7.3 颜色对话框 75
3.7.4 通用对话框应用程序 77
3.8 属性页 81
3.8.1 创建属性页面和属性页 82
3.8.2 属性页的编程 84
3.8.3 PropSheet应用程序 86
3.9 向导 87
3.9.1 创建向导 87
3.9.2 设置向导的按钮 87
3.9.3 WizardApp应用程序 89
3.10 本章小结 90
4.1 显示文本 91
第4章 文本 91
4.2 设置文本颜色 92
4.3 设置字符间距 95
4.4 设置文本的对齐方式 96
4.4.1 水平文本对齐 97
4.4.2 竖直文本对齐 99
4.5 获得文本的规格 104
4.6 创建字体 106
4.7 本章小结 113
第5章 菜单 114
5.1 创建菜单资源 114
5.2 创建消息响应函数 116
5.3 理解菜单UI函数 119
5.3.1 创建更新命令UI函数 119
5.3.2 用选择标记志记菜单项 120
5.3.3 为菜单项加上项目符号 121
5.3.4 使菜单项生效或失效 122
5.3.5 改变菜单项的文本 122
5.4 MenuApp示例应用程序 124
5.4.1 使用MenuApp示例应用程序 125
5.4.2 理解MenuApp示例应用程序 126
5.5 本章小结 131
第6章 标准控件 132
6.1 标准控件简介 132
6.2 在非对话框窗口中放置控件 133
6.3 运行ControlApp2示例应用程序 134
6.4 创建标准控件并对其编程 137
6.4.1 静态控件 138
6.4.2 编辑控件 141
6.4.3 按钮 146
6.4.4 复选框 149
6.4.5 单选钮 150
6.4.6 列表框 152
6.4.7 复合列表框 157
6.5 改变控件颜色 160
6.6 在对话框中操作控件 164
6.6.1 创建应用程序的框架 165
6.6.2 创建新对话框 168
6.6.3 向视图类中添加源代码 171
6.6.4 向对话框类中添加源代码 173
6.6.5 运行DialogControlsApp 179
6.6.6 理解DialogControlsApp 179
6.7 本章小结 181
第7章 通用控件 182
7.1 通用控件简介 182
7.2 基本通用控件 183
7.2.1 CommonControlsApp示例程序 183
7.2.2 理解OnCreate()函数 184
7.2.3 进度条控件 185
7.2.4 滑动条控件 188
7.2.5 微调控制器控件 199
7.2.6 图像列表控件 202
7.3 高级通用控件 207
7.3.1 CommonControlsApp2示例应用程序 207
7.3.2 理解OnCreate()函数 210
7.3.3 列表视图控件 211
7.3.4 树状视图控件 228
7.4 本章小结 240
第8章 打印 241
8.1 Windows中打印概述 241
8.1.1 打印文档的六步曲 241
8.1.2 BasicPrintApp示例程序 244
8.2 在MFC应用程序中打印文本 248
8.2.1 PrintApp示例应用程序 249
8.2.2 用于打印的MFC成员函数 249
8.3 在MFC应用程序中打印图形 259
8.3.1 PrintCircleApp示例应用程序 259
8.3.2 在屏幕和打印机之间进行缩放 260
8.3.3 OnCreate()函数 262
8.3.4 OnDraw()函数 263
8.3.5 OnPreparePrinting()函数 264
8.4 本章小结 271
第二部分 Windows 2000高级编程 273
第9章 位图 273
9.1 DDB和DIB简介 273
9.2 对与设备相关的位图的编程 274
9.2.1 创建并初始化位图对象 274
9.2.2 创建内存DC 276
9.2.3 把位图选入内存DC中 276
9.2.4 绘制位图 277
9.2.5 把位图复制到显示设备上 278
9.2.6 不改变其尺寸而复制位图 278
9.2.7 复制位图并改变其尺寸 279
9.2.8 创建BitmapApp应用程序 281
9.3 对与设备无关的位图的编程 287
9.2.9 运行BitmapApp应用程序 287
9.3.1 加载DIB文件 288
9.3.2 自定义CDib类 293
9.3.3 显示DIB 297
9.3.4 管理调色板 298
9.3.5 创建BitmapApp2应用程序 302
9.3.6 定制应用程序的资源 303
9.3.7 添加源代码 307
9.3.8 运行BitmapApp2应用程序 312
9.4 本章小结 325
第10章 高级GDI 326
10.1 物理和逻辑坐标 326
10.2 映射模式 327
10.2.1 试验窗口和视区原点 328
10.2.2 MM_TEXT模式 331
10.2.3 使用物理度量单位来映射 333
10.2.4 把逻辑单位缩放成任意坐标 335
10.3 光栅操作 341
10.3.1 位图光栅操作 342
10.3.2 线绘图模式 346
10.4 使用区域 352
10.4.1 创建并绘制区域 352
10.4.2 组合区域 354
10.5 使用路径 358
10.5.1 创建路径 358
10.5.2 提交路径 359
10.5.3 定义子路径 359
10.5.4 PathApp示例程序 360
10.6 本章小结 363
第11章 Windows用户界面的编程 364
11.1 使用拖放 364
11.1.1 注册为拖放应用程序 364
11.1.2 处理WM_DROPFILES消息 365
11.1.3 获得放下的文件名 366
11.1.4 结束拖放操作 366
11.1.5 DragDrop2应用程序 366
11.2 操作快捷方式 367
11.2.1 初始化COM 368
11.2.2 创建IShellLink对象 368
11.2.3 获得IPersistFile接口指针 369
11.2.4 初始化新的快捷方式 369
11.2.5 保存快捷方式 370
11.2.7 快捷方式示例应用程序 371
11.2.6 释放指针并使COM回到初始化前的状态 371
11.3 操作系统托盘中的图标 372
11.3.1 向托盘中添加图标 373
11.3.2 响应图标事件 374
11.3.3 从托盘中删除图标 375
11.3.4 TrayApp示例应用程序 375
11.4 shell名称空间 377
11.4.1 枚举文件夹的内容 378
11.4.2 NamespaceApp应用程序 378
11.5 Windows 2000的高级特性 383
11.5.1 DNA 383
11.5.2 活动目录 383
11.5.3 MTS 384
11.6 本章小结 384
12.2 如何组织注册表 385
第12章 注册表 385
12.1 注册表概述 385
12.3 操作注册表 388
12.3.1 使用注册表编辑器 388
12.3.2 使用注册表文件 389
12.3.3 使用注册表API 390
12.4 RegistryApp示例程序 391
12.4.1 向注册表中写入用户参数选择 392
12.4.2 从注册表中读取用户参数选择 396
12.5 本章小结 398
第13章 安装用户应用程序 400
13.1 产品打包 400
13.2.1 确定要打包的文件 401
13.2.2 创建要安装的应用程序 401
13.2 使用InstallShield 401
13.2.3 启动InstallShield工程 403
13.2.4 完成部件设置 408
13.2.5 完成文件组设置 411
13.2.6 创建媒体 413
13.3 本章小结 419
第三部分 操作系统核心编程 420
第14章 进程控制 420
14.1 进程、线程和优先权 420
14.2 工作线程和用户界面线程 422
14.2.1 创建一个工作线程 422
14.2.2 创建用户界面线程(UI Thread) 425
14.3 线程同步 429
14.3.1 使用事件对象 429
14.3.2 使用临界段 437
14.3.3 使用互斥体(Mutex) 439
14.3.4 使用信号 442
14.4 本章小结 446
第15章 输入设备:鼠标和键盘 447
15.1 输入事件和消息 447
15.2 处理鼠标 447
15.2.1 客户区的鼠标消息 448
15.2.2 非客户区鼠标消息 449
15.2.3 Mouse示例应用程序 450
15.3 处理键盘 456
15.3.1 键盘消息 456
15.3.2 Keys示例应用程序 457
15.3.3 试验Keys应用程序 457
15.3.4 KeyDown示例应用程序 459
15.3.5 测试KeyDown应用程序 462
15.4 本章小结 465
第16章 文件处理 466
16.1 文档/视图结构 466
16.1.1 步骤1:创建框架应用程序 467
16.1.2 步骤2:声明文档的数据对象 468
16.1.3 步骤3:完成OnNewDocument()函数 468
16.1.4 步骤4:重载DeleteContents()函数 468
16.1.5 步骤5:完成Serialize()函数 469
16.1.6 步骤6:完成OnDraw()函数 471
16.1.7 步骤7:添加编辑代码 472
16.2 永久性的对象 473
16.3 用CFile类处理文件 481
16.4 本章小结 485
17.1 标准格式 486
第17章 剪贴板 486
17.1.1 Clipboard(剪贴板)示例应用程序 487
17.1.2 把位图拷入剪贴板中 488
17.1.3 粘贴来自剪贴板的位图 492
17.2 已注册的和私有的剪贴板格式 495
17.3 多种剪贴板数据格式 500
17.3.1 多种格式的运用 500
17.3.2 用多种格式复制CirleApp数据 502
17.3.3 用多种格式粘贴CircleApp的数据 505
17.4 本章小结 508
第18章 ActiveX简介 510
18.1 OLE 1.0 510
第四部分 ActiveX编程 510
18.2 OLE 2.0 512
18.3 组件对象模型(COM) 513
18.4 ActiveX 514
18.5 COM+ 515
18.6 ActiveX应用程序和组件 515
18.6.1 ActiveX容器应用程序 515
18.6.2 ActiveX服务器应用程序 516
18.6.3 ActiveX自动化应用程序 517
18.6.4 ActiveX控件 517
18.6.5 ActiveX文档 518
18.7 本章小结 518
第19章 容器 520
19.1 创建容器应用程序框架 520
19.2 管理嵌入对象的大小和位置 523
19.3 使用鼠标来选定项目 525
19.4 本章小结 532
第20章 服务器 533
20.1 创建服务器应用程序框架 533
20.2 定制应用程序的资源 536
20.3 完成应用程序的文档类 540
20.4 完成服务器项目的类 541
20.5 完成视图类 542
20.6 运行服务器应用程序 543
20.6.1 作为独立的应用程序运行ServerApp 543
20.6.2 作为就地编辑(In-Place)器运行ServerApp 544
20.6.3 作为链接项目的编辑器来运行ServerApp 545
20.7 本章小结 547
21.1 自动化服务器应用程序 549
第21章 自动化 549
21.1.1 创建自动化服务器框架 550
21.1.2 定制自动化服务器的资源 551
21.1.3 完成自动化服务器的文档类 552
21.1.4 完成自动化服务器的视图类 554
21.1.5 定义服务器的属性和方法 556
21.2 自动化客户端应用程序 559
21.2.1 创建自动化客户端框架 559
21.2.2 定制客户端应用程序的资源 560
21.2.3 完成客户端应用程序的视图类 561
21.2.4 在客户应用程序中初始化ActiveX 564
21.3 从客户中控制服务器 564
21.4 本章小结 567
第22章 ActiveX控件 568
22.1 创建ActiveX控件框架 568
22.2 创建ActiveX控件的用户界面 570
22.3 创建属性和方法 574
22.4 响应控制按钮 577
22.5 测试ActiveX控件 578
22.6 本章小结 580
第五部分 多媒体编程 581
第23章 DirectDraw 581
23.1 创建DirectDraw程序 582
23.2 向Visual C++工程添加DirectDraw文件 582
23.2.1 向程序中添加ddraw.h头文件 583
23.2.2 向程序中添加ddraw.lib文件 583
23.3 创建DirectDraw对象 584
23.5 设置显示模式 585
23.6 创建主DirectDraw表面 585
23.4 设置屏幕访问级别 585
23.7 创建离屏表面 587
23.8 创建DirectDraw调色板 587
23.9 探索DirectDrawApp示例程序 588
23.9.1 DiretDrawApp的OnInitialUpdate()函数 589
23.9.2 DirectDrawApp的InitMemberVariables()函数 590
23.9.3 DirectDrawApp的InitDirectDraw()函数 591
23.9.4 DirectDrawApp的CreateDDrawSurface()函数 591
23.9.5 DirectDrawApp的ClearDDrawSurface()函数 592
23.9.6 DirectDrawApp的CreateOffScreenSurface()函数 594
23.9.7 DirectDrawApp的InitImages()函数 595
23.9.8 DirectDrawApp的CreateDDrawPal()函数 595
23.9.9 DirectDrawApp的DibTosurface()函数 596
23.9.10 DirectDrawApp的OnTimer()函数 598
23.9.11 DirectDrawApp的OnKeyDown()函数 599
23.9.12 DirectDrawApp的OnDestroy()函数 600
23.10 本章小结 605
第24章 DirectSound 607
24.1 创建DirectSound程序 607
24.2 向Visual C++工程添加DirectSound文件 608
24.2.1 添加dsound.h头文件 608
24.2.2 添加dsound.lib文件 608
24.3 创建DirectSound对象 609
24.4 设置音频硬件访问级别 609
24.5 探索DirectSoundApp应用程序 610
24.5.1 DirectSoundApp 的视图类构造函数 611
24.5.2 DirectSoundApp的OnInitialUpdate()函数 612
24.5.3 DirectSoundApp的InitDirectSound()函数 613
25.5.4 DirectSoundApp的CreateSoundBuffer()函数 613
24.5.5 CWave类 614
24.5.6 DirectSoundApp 的LoadWaveData()函数 617
24.5.7 DirectSoundApp的OnLButtonDown()函数 618
24.5.8 DirectSoundApp的OnDestroy()函数 619
24.6 本章小结 624
第25章 Directinput 626
25.1 创建Directinput程序 626
25.2 向Visual C++工程中添加DirectInput文件 627
25.2.1 添加dinput.h头文件 627
25.2.2 添加dinput.lib及dxguid.lib文件 627
25.3 创建DirectInput对象 628
25.4 创建DirectInput设备 629
25.5 设置数据格式 629
25.8 探索DirectInputApp应用程序 630
25.7 获取设备 630
25.6 设置设备访问级别 630
25.8.1 DirectInputApp的视图类构造函数 631
25.8.2 DirectInputApp的OnInitialUpdate()函数 632
25.8.3 DirectInputApp的OnTimer()函数 634
25.8.4 DirectInputApp的OnDraw()函数 635
25.8.5 DirectInputApp的OnDestroy()函数 635
25.9 本章小结 640
第26章 Direct3D 642
26.1 创建Direct3D程序 642
26.2 创建Direct3D主对象 643
26.3 创建裁剪器对象 644
26.4 创建Direct3D设备 644
26.6 创建对象使用的网格 646
26.5 创建根帧 646
26.7 创建网格使用的帧 647
26.8 视区 648
26.8.1 创建视区帧 648
26.8.2 创建视区 649
26.9 添加光线 649
26.9.1 创建光线对象 649
26.9.2 创建光线的子帧 650
26.10 Direct3D示例应用程序 651
26.10.1 构建新的Direct3D应用程序 651
26.10.2 运行Direct3DApp 654
26.10.3 编写不使用AppWizard的MFC应用程序 655
26.11 本章小结 674
第27章 WinInet 675
27.1 WinInet概述 675
第六部分 Internet编程 675
27.1.1 CInternetSession类 676
27.1.2 CInternetConnection类 677
27.1.3 CHttpConnection类 677
27.1.4 CFtpConnection类 677
27.1.5 CInternetFile类 678
27.1.6 CHttpFile类 679
27.1.7 CFileFind类 679
27.1.8 CFtpFileFind类 680
27.1.9 CInternetException类 681
27.2 编写HTTP应用程序 681
27.2.1 开始因特网会话 681
27.2.3 从HTTP服务器上读取文件 682
27.2.2 打开与HTTP服务器的连接 682
27.2.4 关闭连接与会话 683
27.2.5 创建HTTP会话 683
27.3 编写FTP应用程序 684
27.3.1 打开FTP连接 684
27.3.2 获取根目录 685
27.3.3 读取目录 685
27.3.4 关闭连接与会话 686
27.4 运行FTPAccessApp应用程序 686
27.5 创建FTPAccessApp示例应用程序 688
27.5.1 考察成员变量 688
27.5.2 创建OnDraw()函数 689
27.5.3 创建OnFTPConnect()函数 691
27.5.4 创建OpenFTPDirectory()函数 692
27.5.5 创建ReadFileNames()函数 693
27.5.6 创建OnLButtonDbICIk()函数 694
27.5.7 创建OnRButtonDown()函数 695
27.5.8 创建DownLoadFile()函数 696
27.5.9 创建MoveToPreviousDirectory()函数 697
27.5.10 创建DisplayStatusMessage()函数 698
27.5.11 创建InitSelection()函数 698
27.6 本章小结 699
第28章 Internet Explorer 700
28.1 Internet Explorer组件 700
28.2 创建骨架浏览器应用程序 702
28.2.1 编译MyBrowser 704
28.2.2 配置WebBrowser控件 705
28.2.3 用WebBrowser组件导航 706
28.3 使用HTML对话框 710
28.3.2 在对话框里工作 714
28.3.1 包括HTML资源 714
28.4 使用Dynamic HTML(动态HTML) 715
28.4.1 DHTML对象模型简介 715
28.4.2 访问文档接口 718
28.4.3 使用对象模型 719
28.4.4 扩展DHTML对象模型 719
28.5 发布浏览器控件 724
28.5.1 用注册表确定版本 724
28.5.2 用shdocvw.dll确定版本 725
28.5.3 使用最小化安装 726
28.5.4 IE 5.0卸载须知 726
28.6 运行MyBrowser 727
28.7 本章小结 729
附录 关于本书所附光盘 730
光盘内容 730