《Visual C++技术内幕 第4版 修订版》PDF下载

  • 购买积分:22 如何计算积分?
  • 作  者:(美)小克鲁格林斯基著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2009
  • ISBN:9787302197218
  • 页数:814 页
图书介绍:本书从对Windows,Visual C++和应用程序框架的技术性概述入手,讨论了下列课题:基础知识、高级课题、ActiveX、Internet的C++编程。

前言 29

第一部分 Windows、Visual C++和应用程序框架基础第一章 Microsoft Windows和Visual C++ 3

1.1 Windows的编程模式 3

1.1.1 消息处理 3

1.1.2 Windows的图形设备接口(GDI) 4

1.1.3 基于资源的程序设计 4

1.1.4 内存管理 4

1.1.5 动态连接库(DLL) 5

1.1.6 Win32应用程序编程接口 5

1.2 Visual C++的组成 5

1.2.1 Microsoft Developer Studio 97和创建过程 6

1.2.2 资源编辑器——Workspace ResourceView 8

1.2.3 C/C++编译器 8

1.2.4 资源编译器 9

1.2.5 连接器 9

1.2.6 调试器 9

1.2.7 AppWizard 9

1.2.8 ClassWizard 10

1.2.9 源程序浏览器 10

1.2.10 联机帮助 11

1.2.11 Windows诊断工具 12

1.2.12 源代码控制 12

1.2.13 Gallery 12

1.2.14 Microsoft基本类库4.21版 13

1.2.15 Microsoft ActiveX模板库 13

第二章 Microsoft基本类库应用程序框架 14

2.1 为什么要使用应用程序框架 14

2.1.1 学习曲线 17

2.2 什么是应用程序框架 18

2.2.1 应用程序框架和MFC库 18

2.2.2 应用程序框架示例 18

2.3 MFC库消息映射 21

2.3.1 文档和视图 22

第二部分 MFC库中的视图类 27

第三章 从“Hello,world!”着手学习AppWizard 27

3.1 什么是视图 27

3.2 单文档界面(SDI)和多文档界面(MDI) 28

3.3 “不做任何事情”的应用程序 28

3.4 CEx03aView视图类 32

3.5 在视窗内绘图——Windows的图形设备接口 32

3.5.1 OnDraw成员函数 33

3.5.2 Windows设备环境 33

3.5.3 往EX03A程序中加入绘制代码 33

3.6 资源编辑器简介 35

3.6.1 ex03a.rc的内容 35

3.6.2 运行对话框资源编辑器 36

3.7 Win32 Debug目标和Win32 Release目标 37

3.8 允许诊断宏 37

3.9 对预编译头文件的理解 38

3.10 两种方法运行程序 39

第四章 基本事件处理、映射模式和滚动视图 40

4.1 获取用户输入——消息映射函数 40

4.1.1 消息映射 40

4.1.2 保存视图的状态-类数据成员 41

4.1.3 初始化视图类数据成员 42

4.1.4 使矩形区域无效 42

4.1.5 Windows的客户区域 42

4.1.6 CRect,CPoint和CSize类的运算 43

4.1.7 一个点是否在矩形内 43

4.1.8 CRect的LPRECT操作符 43

4.1.9 一个点是否在椭圆内 44

4.2 EX04A示例程序 44

4.3 对EX04A使用ClassWizard 48

4.3.1 同时使用AppWizard和ClassWizard 49

4.4 映射模式 51

4.4.1 MM_TEXT映射模式 52

4.4.2 “固定比例”映射模式 53

4.4.3 “可变比例”映射模式 53

4.4.4 坐标变换 54

4.4.5 EX04B示例程序——转换到MM_HIMETRIC映射模式 56

4.5 滚动视窗 57

4.5.1 窗口比人们所见到的要大 57

4.5.2 滚动条 58

4.5.3 滚动方式的选择 58

4.5.4 OnInitialUpdate函数 58

4.5.5 接收键盘输入 58

4.5.6 EX04C滚动示例程序 59

4.6 其他Windows消息 62

4.6.1 WM_CREATE消息 62

4.6.2 WM_CLOSE消息 63

4.6.3 WM_QUERYENDSESSION消息 63

4.6.4 WM_DESTROY消息 63

4.6.5 WM_NCDESTROY消息 63

第五章 图形设备接口(GDI)、颜色及字体 64

5.1 设备环境类 64

5.1.1 显示设备环境类CClientDC和CWindowDC 65

5.1.2 构造和析构CDC对象 65

5.1.3 设备环境的状态 66

5.1.4 CPaint DC类 66

5.2 GDI对象 67

5.2.1 GDI对象的构造与析构 67

5.2.2 跟踪GDI对象 67

5.2.3 库存的GDI对象 68

5.2.4 GDI选择的有效期 69

5.3 Windows的颜色映射 70

5.3.1 标准视频图形阵列(VGA)显示卡 70

5.3.2 256色显示卡 71

5.3.3 16位颜色显示卡 71

5.3.4 24位颜色显示卡 72

5.4 字体 72

5.4.1 字体是GDI对象 72

5.4.2 选择字体 72

5.4.3 打印字体 73

5.4.4 显示字体 73

5.4.5 显示器的逻辑英寸和物理英寸 73

5.4.6 计算字符高度 74

5.5 EX05A示例程序 75

5.5.1 EX05A程序的组成元素 78

5.6 EX05B程序 79

5.6.1 EX05B程序的组成元素 82

5.7 EX05C示例程序——再次使用CScrollView 82

5.7.1 EX05C程序的组成元素 86

5.7.2 CScrollView的SetScaleToFitSize模式 87

5.7.3 在滚动视图中使用逻辑twips映射模式 88

第六章 模式对话框和Windows通用控件 89

6.1 模式和无模式对话框 89

6.2 资源和控件 90

6.3 模式对话框的编程 90

6.4 包罗万象的对话框——EX06A示例程序 91

6.4.1 创建对话框资源 92

6.4.2 ClassWizard和对话框类 99

6.4.3 将对话框与视图相连接 102

6.4.4 深入理解EX06A应用程序 104

6.5 对话框程序的改进 105

6.5.1 获得OnOK退出控制 106

6.5.2 OnCancel处理 107

6.5.3 和滚动条控件挂上钩 107

6.6 控件的标识:CWnd指针和控件ID 109

6.7 设置对话框的背景色和其中控件的颜色 109

6.8 在对话框窗口内绘图 111

6.9 在运行时加入对话框控件 111

6.10 利用其他的控件特性 112

6.11 Windows通用控件 112

6.11.1 进度指示器控件 113

6.11.2 滑杆条(Trackbar)控件 113

6.11.3 微调按钮控件 114

6.11.4 列表控件 114

6.11.5 树状控件 114

6.11.6 WM_NOTIFY消息 115

6.12 EX06B示例程序 115

6.13 其他Windows通用控件 125

第七章 无模式对话框和Windows通用对话框类 126

7.1 无模式对话框 126

7.1.1 创建无模式对话框 126

7.1.2 用户定义的消息 127

7.1.3 对话框的归属 127

7.1.4 无模式对话框的例子——EX07A 127

7.2 CFormView类——另外一种可供选择的无模式对话框 134

7.3 Windows通用对话框 134

7.3.1 直接使用CFileDialog类 134

7.3.2 从通用对话框类进行派生 135

7.3.3 嵌套对话框 135

7.3.4 使用CFileDialog的一个例子——EX07B 135

7.3.5 CFileDialog的其他可定制特性 141

第八章 使用ActiveX控件 142

8.1 ActiveX控件和普通的Windows控件 142

8.1.1 普通的Windows控件——参考体系 142

8.1.2 ActiveX控件与普通控件的相同点 143

8.1.3 ActiveX控件与普通控件的不同点——属性和方法 143

8.2 安装ActiveX控件 144

8.3 日历控件 145

8.4 ActiveX控件包容器编程 147

8.4.1 属性访问 147

8.4.2 ClassWizard为ActiveX控件产生的C++类 148

8.4.3 AppWizard对ActiveX控件的支持 150

8.4.4 ClassWizard和包容器对话框 150

8.4.5 对话框类数据成员和控件类的用法 150

8.4.6 映射ActiveX控件事件 151

8.4.7 把ActiveX控件锁定在内存里 152

8.5 EX08A示例程序——ActiveX控件对话框包容器 152

8.6 ActiveX控件在HTML文件中的使用 160

8.7 在运行时创建ActiveX控件 160

8.8 EX08B示例程序——Web浏览器ActiveX控件 161

8.9 EX08C示例程序——一个完整的双窗口浏览器 165

8.10 图形属性 165

8.11 约束属性——改变通知 166

8.12 其他的ActiveX控件 167

第九章 Win32内存管理 168

9.1 进程和内存空间 168

9.1.1 Windows 95进程地址空间 170

9.1.2 Windows NT进程地址空间 170

9.2 虚拟内存如何工作 170

9.3 VirtualAlloc函数——占用和保留内存 173

9.4 Windows堆和GlobalAlloc函数族 173

9.5 小内存堆,C++的new和delete操作符,_heapmin 174

9.6 内存映射文件 175

9.7 访问资源 176

9.8 管理动态内存的一些提示 177

9.9 常量数据的优化存储 177

第十章 位图 179

10.1 GDI位图和与设备无关的位图 179

10.2 彩色位图和单色位图 180

10.3 使用GDI位图 180

10.3.1 从资源中装入GDI位图 180

10.3.2 显示映射模式的作用 181

10.3.3 对位进行伸缩处理 182

10.3.4 EX10A示例程序 182

10.4 利用位图改进屏幕显示 185

10.4.1 EX10B示例程序 185

10.4.2 Windows动画 189

10.5 DIB和CDib类 190

10.5.1 关于调色板编程的术语 190

10.5.2 DIB、象素和颜色表 191

10.5.3 BMP文件中DIB的结构 192

10.5.4 DIB访问函数 193

10.5.5 CDib类 193

10.5.6 DIB显示性能 198

10.5.7 EX10C示例程序 199

10.6 进一步使用DIB 202

10.6.1 LoadImage函数 202

10.6.2 DrawDibDraw函数 203

10.7 在按钮上设置位图 204

10.7.1 EX10D示例程序 205

10.7.2 进一步使用位图按钮 208

第十一章 Windows消息处理和多线程编程 209

11.1 Windows消息处理 209

11.1.1 单线程程序处理消息的过程 209

11.1.2 交出控制 210

11.1.3 计时器 210

11.1.4 EX11A示例程序 211

11.2 空状态处理 214

11.3 多线程编程 215

11.3.1 编写辅助线程函数和启动线程 215

11.3.2 主线程如何和辅助线程通话 216

11.3.3 辅助线程如何和主线程通话 217

11.3.4 EX11B示例程序 217

11.3.5 用事件使线程同步 219

11.3.6 EX11C示例程序 219

11.3.7 线程阻塞 221

11.3.8 排斥区 222

11.3.9 互斥体(mutex)和信号(semaphore) 223

11.3.10 用户界面线程(UI线程) 224

第三部分 文档-视图结构 227

第十二章 菜单、键盘加速键、复文本编辑控件和属性表 227

12.1 主框架窗口和文档类 227

12.2 Windows的菜单 228

12.3 键盘加速键 229

12.4 命令处理 229

12.4.1 派生类中的命令消息控制 230

12.4.2 更新命令用户界面消息控制函数 231

12.4.3 对话框发送的命令 231

12.5 应用程序框架的内含菜单项 232

12.6 菜单项的允许/禁用 232

12.7 MFC文本编辑选择 233

12.7.1 CEditView类 233

12.7.2 CRichEditView类 233

12.7.3 CRichEditCtrl类 233

12.8 EX12A示例程序 234

12.9 属性表 239

12.9.1 创建属性表 239

12.9.2 属性表数据交换 239

12.10 改进EX12A示例程序 240

12.11 Apply按钮的处理过程 254

12.12 CMenu类 254

12.13 创建浮动的弹出式菜单 255

12.14 扩展命令处理 256

第十三章 工具栏和状态栏 258

13.1 控制栏和应用程序框架 258

13.2 工具栏 259

13.2.1 工具栏位图 259

13.2.2 按钮的状态 259

13.2.3 工具栏和命令消息 260

13.2.4 工具栏更新命令UI消息控制函数 261

13.3 工具提示 261

13.4 寻找主框架窗口 261

13.5 EX13A工具栏示例程序 262

13.6 状态栏 267

13.6.1 状态栏的定义 267

13.6.2 信息行 268

13.6.3 状态指示器 268

13.6.4 获得对状态栏的控制 268

13.7 EX13B状态栏示例程序 269

第十四章 可重用框架窗口基类 275

14.1 为什么可重用基类难以设计 275

14.2 CPersistentFrame类 276

14.3 CFrameWnd类和ActivateFrame成员函数 276

14.4 PreCreateWindow成员函数 277

14.5 Windows注册表 278

14.6 使用CString类 280

14.7 最大化窗口的位置 281

14.8 控制栏状态和注册表 282

14.9 静态数据成员 282

14.10 默认窗口矩形 282

14.11 EX14A示例程序 283

14.12 MDI应用程序中的持续框架 289

第十五章 文档与视图的分离 291

15.1 文档-视图之间的相互作用函数 291

15.1.1 CView::GetDocument函数 291

15.1.2 CDocumeat::Update AllViews函数 292

15.1.3 CView::OnUpdate函数 293

15.1.4 CView::OnInitialUpdate函数 293

15.1.5 CDocument::OnNewDocument函数 293

15.2 最简单的文档-视图应用程序 294

15.3 CFormView类 294

15.4 CObject类 295

15.5 诊断信息转储 296

15.5.1 TRACE宏 296

15.5.2 afxDump对象 296

15.5.3 信息转储环境及CObject类 297

15.5.4 未被删除对象的自动信息转储 298

15.6 EX15A示例程序 300

15.7 更加高级的文档-视图之间的相互作用 307

15.8 CDocument::DeleteContents函数 308

15.9 CObList集合类 308

15.9.1 对先入先出列表使用CObList类 309

15.9.2 在CObList中进行迭代——POSITION变量 310

15.9.3 CTypedPtrList模板集合类 311

15.9.4 信息转储环境及集合类 312

15.10 EX15B示例程序 313

15.10.1 资源要求 314

15.10.2 代码要求 315

15.10.3 CStudentDoc 316

15.10.4 CStudentView 320

15.10.5 测试EX15B应用程序 330

15.11 留给读者的两个练习 330

第十六章 读和写文档——SDI应用程序 331

16.1 什么是序列化 331

16.1.1 磁盘文件和归档(Archives) 332

16.1.2 使类可序列化 332

16.1.3 编写Serialize函数 333

16.1.4 从归档中载入——内嵌对象和指针 334

16.1.5 使集合序列化 335

16.1.6 Serialize函数和应用程序框架 336

16.2 SDI应用程序 336

16.2.1 Windows应用程序对象 336

16.2.2 文档模板类 337

16.2.3 文档模板资源 339

16.2.4 SDI文档的多视图 339

16.2.5 创建空文档——CWinApp::OnFileNew函数 339

16.2.6 文档类的OnNewDocument函数 340

16.2.7 连接File Open与序列化代码——OnFileOpen函数 340

16.2.8 文档类的DeleteContents函数 341

16.2.9 将File Save和File Save As与序列化代码相连接 341

16.2.10 文档的“脏”标志 342

16.3 EX16A——序列化SDI示例程序 342

16.3.1 CStudent 343

16.3.2 CEx16aApp 343

16.3.3 CFrameWnd 348

16.3.4 CStudentDoc 352

16.3.5 CStudentView 353

16.3.6 测试EX16A应用程序 353

16.4 从Explorer启动及拖放 354

16.4.1 程序注册 354

16.4.2 在文档上双击鼠标 355

16.4.3 允许拖放 355

16.4.4 程序启动参数 356

16.4.5 试验用Explorer启动程序及拖放功能 356

第十七章 读和写文档——MDI应用程序 357

17.1 MDI应用程序 357

17.1.1 一个典型的具有MFC库风格的MDI应用程序 357

17.1.2 MDI应用程序对象 360

17.1.3 MDI文档模板类 360

17.1.4 MDI框架窗口和MDI子窗口 360

17.1.5 主框架和文档模板资源 361

17.1.6 创建空文档——CWinApp::OnFileNew函数 362

17.1.7 为现有文档创建新的视图 362

17.1.8 载入和存储文档 363

17.1.9 多文档模板 363

17.1.10 Explorer启动及拖放 364

17.2 EX17A示例程序 364

17.2.1 CEx17aApp 365

17.2.2 CMainFrame 370

17.2.3 CChildFrame 373

17.2.4 测试EX17A应用程序 376

第十八章 打印和打印预览 377

18.1 Windows的打印 377

18.1.1 标准打印对话框 377

18.1.2 交互选择打印页码 377

18.1.3 显示页和打印页 379

18.2 打印预览 379

18.3 有关打印机的程序设计 380

18.3.1 打印机设备环境和CView::OnDraw函数 380

18.3.2 CView::OnPrint函数 380

18.3.3 准备设备环境——CView::OnPrepareDC函数 380

18.3.4 打印任务的开始和结束 381

18.4 EX18A示例程序——一个所见即所得的打印程序 381

18.5 读取打印机矩形框 388

18.6 再看模板集合类——CArray类 388

18.7 EX18B示例程序——多页打印程序 389

第十九章 切分窗口和多视图 395

19.1 切分窗口 395

19.2 多视图选择 395

19.3 动态和静态切分窗口 396

19.4 EX19A示例程序——具有单个视图类的SDI动态切分 396

19.4.1 与切分有关的资源 397

19.4.2 CMainFrame 397

19.4.3 测试EX19A应用程序 398

19.5 EX19B示例程序——双视图类SDI静态切分 399

19.5.1 CHexView 399

19.5.2 CMainFrame 400

19.5.3 测试EX19B应用程序 400

19.6 EX19C示例程序——切换没有切分的视图类 401

19.6.1 资源要求 401

19.6.2 CMainFrame 401

19.6.3 测试EX19C应用程序 403

19.7 EX19D示例程序——多视图类MDI应用程序 403

19.7.1 资源要求 404

19.7.2 CEx19dApp 404

19.7.3 CMainFrame 405

19.7.4 测试EX19D应用程序 406

第二十章 上下文相关帮助 407

20.1 Windows的WinHelp程序 407

20.1.1 复文本格式(RTF) 407

20.1.2 编写简单的帮助文件 408

20.1.3 改进的Table Of Contents 412

20.2 应用程序框架与WinHelp 413

20.2.1 调用WinHelp 414

20.2.2 使用搜索字符串 414

20.2.3 从应用程序的菜单调用WinHHelp 415

20.2.4 帮助上下文别名 415

20.2.5 确定帮助上下文 415

20.2.6 F1帮助 416

20.2.7 Shift-F1帮助 416

20.2.8 消息框帮助——AfxMessageBox函数 417

20.2.9 一般的帮助 417

20.3 帮助示例——不需要任何编程 418

20.4 MAKEHELP处理 420

20.5 帮助命令处理 420

20.5.1 F1处理过程 421

20.5.2 Shift-F1处理过程 421

20.6 帮助命令处理示例程序——EX20B 422

20.6.1 头文件要求 422

20.6.2 CStringView 422

20.6.3 CHexView 423

20.6.4 资源要求 424

20.6.5 帮助文件要求 424

20.6.6 测试EX20B应用程序 425

第二十一章 动态连接库 426

21.1 基本DLL理论 426

21.1.1 导入如何与导出相匹配 427

21.1.2 隐式连接和显式连接 427

21.1.3 符号连接和序号连接 428

21.1.4 DLL入口点——DllMain 429

21.1.5 实例句柄——装载资源 429

21.1.6 客户程序如何找到DLL 430

21.1.7 调试DLL 430

21.2 MFC DLL——扩展的和正规的 430

21.2.1 共享的MFC DLL和Windows DLL 431

21.2.2 MFC扩展DLL——导出类 432

21.2.3 MFC扩展DLL资源搜索的顺序 432

21.2.4 EX21A示例程序——MFC扩展DLL 433

21.2.5 EX21B示例程序——DLL测试客户程序 435

21.2.6 MFC正规DLL——CWinApp派生类 436

21.2.7 使用AFX_MANAGE_STATE宏 436

21.2.8 MFC正规DLL资源搜索顺序 436

21.2.9 EX21C示例程序——MFC正规DLL 437

21.2.10 修改EX21B示例程序——加入代码以测试ex21c.dll 438

21.3 自定义控件DLL 440

21.3.1 什么是自定义控件 440

21.3.2 自定义控件的窗口类 440

21.3.3 MFC库和WndProc函数 441

21.3.4 自定义控件通知消息 441

21.3.5 发送给控件的用户定义消息 442

21.3.6 EX21D示例程序——自定义控件 442

21.3.7 再修改EX21B示例程序——加入代码以测试ex21d.dll 448

第二十二章 不带文档或视图类的MFC程序 452

22.1 EX22A示例程序——一个基于对话框的应用程序 452

22.1.1 应用程序类InitInstance函数 454

22.1.2 对话框类和程序图标 455

22.2 EX22B示例——一个SDI应用程序 456

22.2.1 应用程序类InitInstance函数 457

22.2.2 CMainFrame类 458

22.3 EX22C示例程序——一个MDI应用程序 458

22.3.1 应用类程序InitInstance函数 459

22.3.2 CMainFrame类 460

22.3.3 CChildFrame类 462

22.3.4 资源要求 462

22.4 定制(Custom)AppWizard 463

第四部分 ActiveX:组件对象模型、自动化和OLE第二十三章 组件对象模型 467

23.1 ActiveX技术背景 467

23.2 组件对象模型(COM) 468

23.2.1 COM所解决的问题 468

23.2.2 COM的本质 468

23.2.3 什么是COM接口 469

23.2.4 IUnknown接口和QueryInterface成员函数 473

23.2.5 引用计数:AddRef和Release函数 475

23.2.6 类厂(class factory) 476

23.2.7 CCmdTarget类 477

23.2.8 EX23A示例程序——一个模拟的COM 478

23.3 MFC库中实际的COM 486

23.3.1 COM的CoGetClassObject函数 486

23.3.2 COM和Windows注册表 487

23.3.3 运行时对象注册 488

23.3.4 COM客户程序如何调用进程内组件 489

23.3.5 COM客户程序如何调用进程外组件 491

23.3.6 MFC接口宏 493

23.3.7 MFC的COleObjectFactory类 494

23.3.8 AppWizard/ClassWizard对COM进程内组件的支持 494

23.3.9 MFC COM客户程序 496

23.3.10 EX23B示例程序——MFC COM进程内组件 496

23.3.11 EX23C示例程序——MFC COM客户 501

23.4 包容、集合和继承 502

第二十四章 自动化 504

24.1 C++与Visual Basic for Applications(VBA)之间的连接 504

24.2 自动化客户和自动化组件 505

24.3 Microsoft Excel——一种比Visual Basic还好的Visual Basic 505

24.4 属性(property)、方法(method)和集合(collection) 507

24.5 自动化所解决的问题 508

24.6 IDispatch接口 508

24.7 自动化程序设计的选择 509

24.8 MFC IDispatch的实现 510

24.9 一个MFC自动化组件 511

24.10 一个MFC自动化客户程序 512

24.11 使用编译器#import指令的自动化客户程序 514

24.12 VARIANT类型 515

24.13 COleVariant类 517

24.14 Invoke的参数和返回值的类型转换 519

24.15 自动化示例 521

24.15.1 EX24A自动化组件EXE示例——不带任何用户界面 521

24.15.2 EX24B自动化组件DLL示例程序 529

24.15.3 EX24C SDI自动化组件EXE示例——带用户界面 538

24.15.4 EX24D自动化客户示例程序 544

24.15.5 EX24E自动化客户示例程序 559

24.16 VBA早绑定 562

24.16.1 注册类型库 563

24.16.2 组件如何注册自己的类型库 564

24.16.3 ODL文件 564

24.16.4 Excel如何使用类型库 565

24.16.5 为什么使用早绑定 567

24.16.6 客户-组件的快速连接 567

第二十五章 统一数据传输——剪贴板传输以及OLE拖放 568

25.1 IDataObject接口 568

25.2 IDataObject如何增强标准剪贴板的支持 568

25.3 FORMATETC和STGMEDIUM结构 569

25.3.1 FORMATETC 569

25.3.2 STGMEDIUM 570

25.3.3 IDataObject接口成员函数 570

25.4 MFC统一数据传输支持 571

25.4.1 COleDataSource类 572

25.4.2 COleDataObject类 573

25.4.3 MFC数据对象剪贴板传输 574

25.5 MFC CRectTracker类 576

25.5.1 CRectTracker类成员函数 576

25.5.2 CRectTracker类矩形坐标转换 577

25.6 EX25A示例程序——数据对象剪贴板 577

25.6.1 CMainFrame类 578

25.6.2 CEx25aDoc类 578

25.6.3 CEx25aView类 578

25.7 MFC拖放 587

25.7.1 传输的源方 587

25.7.2 传输的目标方 587

25.7.3 拖放的顺序 588

25.8 EX25B示例程序——OLE拖放 589

25.8.1 CEx25bDoc类 589

25.8.2 CEx25bView类 589

25.9 Windows应用程序和拖放——Dobjview 592

第二十六章 结构化存储 593

26.1 复合文件 593

26.2 存储(Storage)和IStorage接口 594

26.2.1 获取IStorage指针 596

26.2.2 释放STATSTG内存 596

26.2.3 对存储对象的元素进行枚举 596

26.2.4 进程间共享存储 597

26.3 流(Stream)和IStream接口 597

26.3.1 IStream接口成员函数 597

26.3.2 IStream编程 598

26.4 ILockBytes接口 599

26.5 EX26A示例程序——结构化存储 599

26.5.1 菜单 600

26.5.2 CEx26aView类 600

26.5.3 辅助线程 600

26.6 结构化存储和持久COM对象 604

26.6.1 IPersistStorage接口 605

26.6.2 IPersistStream接口 606

26.6.3 IPersistStream编程 606

26.7 EX26B示例程序——一个持久DLL组件 607

26.8 EX26C示例程序——一个持久存储客户程序 613

26.9 复合文件碎片的处理 617

26.10 复合文件的其他优点 618

第二十七章 OLE嵌入组件和包容器 619

27.1 嵌入和实地激活(可视编辑) 619

27.2 最小服务器和完备服务器(组件)——链接 620

27.3 可视编辑前景暗淡的一面 620

27.4 Windows图元文件和内嵌对象 621

27.5 组件程序的MFC OLE结构 622

27.6 EX27A示例程序——MFC实地激活最小服务器 623

27.6.1 MDI嵌入组件 627

27.6.2 实地组件调整大小的思路 628

27.7 包容器-组件相互作用 628

27.7.1 使用组件的IOleObject接口 629

27.7.2 装入和保存组件自身的数据——组件文档 630

27.7.3 剪贴板数据传输 630

27.7.4 获得组件的图元文件 630

27.7.5 进程内控制器的角色 631

27.8 组件状态 632

27.8.1 包容器接口 632

27.8.2 通报连接 633

27.8.3 剪贴板图元文件 634

27.9 接口简要说明 634

27.9.1 IOleObject接口 634

27.9.2 IViewObject2接口 635

27.9.3 IOleClientSite接口 635

27.9.4 IAdviseSink接口 636

27.10 OLE辅助函数 636

27.11 OLE嵌入包容器应用程序 637

27.11.1 MFC对OLE包容器的支持 637

27.11.2 一些包容器限制 638

27.11.3 包容器特性 638

27.12 EX27B示例程序——嵌入包容器 638

27.12.1 CEx27bView类 639

27.12.2 CEx27bDoc类 652

27.13 EX27C示例程序——OLE嵌入组件 660

27.13.1 CEx27cView类 661

27.13.2 CEx27cDoc类 661

第五部分 数据库管理 671

第二十八章 Microsoft ODBC数据库管理 671

28.1 数据库管理的优势 671

28.2 结构化查询语言 672

28.3 ODBC标准 673

28.3.1 ODBC结构 673

28.3.2 ODBC SDK编程 674

28.4 MFC ODBC类——CRecordset和CDatabase 675

28.4.1 记录集中关于行的计数 677

28.4.2 处理ODBC异常 677

28.5 学生注册数据库 678

28.6 EX28A记录集示例程序 678

28.7 EX28A示例程序中的元素 684

28.7.1 记录集类与应用程序之间的连接 684

28.7.2 CEx28aView类的OnInitialUpdate成员函数 684

28.7.3 CEx28aView类的OnDraw成员函数 685

28.8 筛选器和排序字符串 686

28.9 连接两个数据库表 686

28.10 MFC CRecordView类 687

28.11 EX28B记录查看示例程序 688

28.12 多记录集 693

28.12.1 EX28C多记录集示例程序 694

28.12.2 参数化查询 695

28.13 ODBC多线程 696

28.14 大批行数据获取(bulk row fetch) 696

28.15 使用不带绑定的记录集 696

第二十九章 Microsoft Data Access Objects数据库管理 699

29.1 DAO、COM和Microsoft Jet数据库引擎 699

29.2 DAO和VBA 699

29.3 DAO和MFC 700

29.4 利用DAO可以打开什么样的数据库 701

29.5 按ODBC模式使用DAO——快照和动态集 701

29.6 DAO表类型记录集 702

29.7 DAO QueryDef和TableDef 703

29.8 DAO多线程情况 703

29.9 在滚动窗口中显示数据库的行 703

29.9.1 滚动显示方法 703

29.9.2 一个行-视图类 704

29.9.3 基类和派生类的分工处理 705

29.9.4 CRowView的纯虚成员函数 706

29.9.5 其他的CRowView函数 706

29.10 动态记录集的编程 707

29.11 EX29A示例程序 708

29.11.1 CEx29aApp 709

29.11.2 CMainFrame和CChildFrame 709

29.11.3 CEx29aDoc 709

29.11.4 CEx29aView 716

29.11.5 CTableSelect 719

29.11.6 CIsamSelect 720

29.12 EX29A资源文件 721

29.13 运行EX29A程序 722

第六部分 Internet程序设计 725

第三十章 TCP/IP、Winsock和WinInet 725

30.1 既针对COM也可以不需要COM 725

30.2 Internet基础 725

30.2.1 网络协议——层 726

30.2.2 Internet协议 726

30.2.3 用户报文协议 727

30.2.4 IP地址格式——网络字节顺序 728

30.2.5 传输控制协议 729

30.2.6 域名系统(Domain Name System) 730

30.2.7 HTTP基础 732

30.2.8 FTP基础 734

30.2.9 Internet和Intranet 734

30.3 建立自己的价值$99的Intranet 734

30.3.1 NT文件系统和文件分配表 735

30.3.2 网络硬件 735

30.3.3 对Windows进行网络配置 735

30.3.4 Intranet的主机名——HOSTS文件 736

30.3.5 测试Intranet——Ping程序 736

30.3.6 只有一台计算机的Intranet——TCP/IP环形地址 736

30.4 Winsock 737

30.4.1 同步和异步Winsock编程 737

30.4.2 MFC Winsock类 737

30.4.3 Blocking Socket类 737

30.4.4 一个简化了的HTTP服务器程序 745

30.4.5 一个简化了的HTTP客户端程序 747

30.5 用CHttpBlockingSocket创建一个Web服务器程序 749

30.5.1 EX30A服务器限制 749

30.5.2 EX30A服务器结构 749

30.5.3 使用Win32 TransmitFile函数 750

30.5.4 编译和测试EX30A 751

30.5.5 使用Telnet 752

30.6 用CHttpBlockingSocket创建一个Web客户端程序 752

30.6.1 EX30A Winsock客户 752

30.6.2 EX30A对代理服务器的支持 753

30.6.3 测试EX30A Winsock客户 753

30.7 WinInet 753

30.7.1 WinInet相对于Winsock的优势 754

30.7.2 MFC WinInet类 754

30.7.3 Internet会话状态回调 756

30.7.4 一个简化了的WinInet客户程序 757

30.8 用MFC WinInet类创建一个Web客户 758

30.8.1 EX30A WinInet Client #1——使用CHttpConnection 758

30.8.2 测试WinInet Client #1 758

30.8.3 EX30A WinInet Client #2——使用OpenURL 759

30.8.4 测试WinInet Client #2 760

30.9 异步Moniker文件 760

30.9.1 Moniker 760

30.9.2 MFC CAsyncMonikerFile类 760

30.9.3 在程序中使用CAsyncMonikerFile类 760

30.9.4 异步moniker文件和WinInet编程 761

第三十一章 Microsoft Internet Information Server编程 763

31.1 IIS的替代产品 763

31.2 Microsoft IIS 763

31.2.1 安装和控制IIS 763

31.2.2 运行Internet Service Manager 764

31.2.3 IIS的安全性 764

31.2.4 IIS目录 765

31.2.5 IIS日志记录 766

31.2.6 测试IIS 766

31.3 ISAPI服务器扩展 767

31.3.1 通用网关接口和ISAPI 767

31.3.2 一个简单的ISAPI服务器扩展GET请求 767

31.3.3 HTML窗体——GET和POST 768

31.3.4 编写ISAPI服务器扩展DLL 769

31.3.5 MFC ISAPI服务器扩展类 770

31.4 一个实际的ISAPI服务器扩展——ex31a.dll 771

31.4.1 第一步——获取定单 772

31.4.2 第二步——处理确认窗体 775

31.4.3 编译并测试ex31a.dll 776

31.4.4 调试EX31A DLL 776

31.5 ISAPI数据库访问 777

31.6 使用HTTP Cookie来连接事务 778

31.6.1 Cookie如何工作 778

31.6.2 ISAPI服务器扩展如何处理Cookie 779

31.6.3 使用Cookie的一些问题 779

31.7 WWW鉴定 779

31.7.1 基本鉴定 779

31.7.2 Windows NT问讯/应答鉴定 780

31.7.3 安全套接字层(SSL) 780

31.8 ISAPI过滤器 781

31.8.1 编写ISAPI过滤器DLL 781

31.8.2 MFC ISAPI过滤器类 781

31.9 ISAPI过滤器示例——ex31b.dll、ex31c.exe 782

31.9.1 选择通知 783

31.9.2 把事务数据发送到显示程序 783

31.9.3 显示程序 785

31.9.4 编译并测试EX31B ISAPI过滤器 785

第三十二章 ActiveX文档服务器和Internet 787

32.1 ActiveX文档理论 787

32.1.1 ActiveX文档服务器和OLE嵌入服务器 787

32.1.2 从IE3中运行ActiveX文档服务器 788

32.1.3 ActiveX文档服务器和ActiveX控件 789

32.1.4 ActiveX文档服务器和包容器的OLE接口 790

32.1.5 MFC对ActiveX文档服务器的支持 790

32.2 ActiveX文档服务器示例程序EX32A 791

32.2.1 EX32A第一阶段——简单的服务器 792

32.2.2 调试ActiveX文档服务器 792

32.2.3 EX32A第二阶段——加入WinInet调用 792

32.3 ActiveX文档服务器示例程序EX32B 794

32.3.1 在程序控制下产生POST请求 799

32.3.2 EX32B视图类 800

32.3.3 编译并测试EX32B 802

32.3.4 ActiveX文档服务器和VB Script 802

32.4 进一步使用ActiveX文档服务器 803

附录A Microsoft基本类(MFC)库中的消息映射函数 804

附录B MFC库运行时类识型和动态对象创建 810