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

  • 购买积分:22 如何计算积分?
  • 作  者:(美)(D.J.克鲁格林斯基)David J.Kruglinski著;潘爱民,王国印译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:1999
  • ISBN:7302032432
  • 页数:814 页
图书介绍:正如本书的目录中所列出的那样,本书主要包括六大部分和附录。第一部分:Windows、VisualC++和应用程序框架基础在这部分中,既有理论阐述,又有实际应用,我力求使这两者达到一种平衡。在这部分中,我对Win32和VisualC++的基本组成作了一番评论,进而逐步将应用程序框架以及文档-视图结构(document::viewarchitecture)展现在读者面前。同时,在这部分中还给出了一个通过MFC类库中的类来构造的简单的“Hello,world!”程序,该程序只需30行代码。第二部分:MFC库中的视图类在假定读者已经熟悉使用基本的WindowsAPI的前提下,类库文档材料简捷而又完整地介绍了应用程序框架的基本元素。在第二部分中,我将把读者的注意力集中在应用程序框架的主要构成元素之一::“视图”(view)上,“视图”实际上是一个窗口。在这里,我们将从C++和类库中的类的角度来学习和掌握熟练的Windows程序员早已熟知的有关窗口的一些特性。您还将使用VisualC++工具,而这些工具避免了以前Windows程序员不得不忍耐的一些繁杂的代码编写工作。第二部分介绍了很多内容,包括用

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

第一章 Microsoft Windows和Visual C++ 3

1.1 Windows的编程模式 3

1.1.1消息处理 3

1.1.2Windows的图形设备接口(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.5连接器 9

1.2.6调试器 9

1.2.7 AppWizard 9

1.2.4资源编译器 9

1.2.8 ClassWizard 10

1.2.9源程序浏览器 10

1.2.10联机帮助 11

1.2.12源代码控制 12

1.2.13 Gallery 12

1.2.11 Windows诊断工具 12

1.2.14 Microsoft基本类库4。21版 13

1.2.15 Microsoft ActiveX模板库 13

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

2.1.1学习曲线 17

2.2.1应用程序框架和MFC库 18

2.2.2应用程序框架示例 18

2.2什么是应用程序框架 18

2.3 MFC库消息映射 21

2.3.1文档和视图 22

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

3.1什么是视图 27

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

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

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

前言 29

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.1 ex03a.rc的内容 35

3.6资源编辑器简介 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.5 Windows的客户区域 42

4.1.4使矩形区域无效 42

4.1.3初始化视图类数据成员 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 ?映射模式 52

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

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

4.4.4坐标变换 54

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

4.5滚动视窗 57

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

4.5.2滚动条 58

4.5.3滚动方式的选择 58

4.5.4 OnlnitialUpdate函数 58

4.5.5接收键盘输入 58

4.5.6 EX04C滚动示例程序 59

4.6.1 WM-CREATE消息 62

4.6其他Windows消息 62

4.6.2 WM-CLOSE消息 63

4.6.3 WM-QUERYENDSESSION消息 63

4.6.4 WM-?消息 63

4.6.5 WM-?消息 63

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

5.1设备环境类 64

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

5.1.2构造和析构CDC对象 65

5.1.3设备环境的状态 66

5.1.4 Cpaint DC类 66

5.2.2跟踪GDI对象 67

5.2.1 GDI对象的构造与析构 67

5.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 ?色显示卡 71

5.3.3 16位颜色显示卡 71

5.4.1字体是GDI对象 72

5.4.2选择字体 72

5.4字体 72

5.3.4 24位颜色显示卡 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的SetScaleToFitSiza模式 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.5树状控件 114

6.11.4列表控件 114

6.11.3微调控钮控件 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.3.1直接使用CFileDialog类 134

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

7.3 Windows通用对话框 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.7在运行时创建ActiveX控件 160

8.6 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 Windows95进程地址空间 170

9.1.2 Windows NT进程地址空间 170

9.2 虚拟内存如何工作 170

9.4 Windows堆和ClooalAlloc函数族 173

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

9.5 ?内有堆,C++的new和delete操作符,_heapmin 174

9.6 内存映射文件 175

9.7 访问资源 176

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

9.9 常量数据的优化存储 177

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

11.1 Windows消息处理 209

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

11.1.3计时器 210

11.1.2交出控制 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.3对话框发送的命令 231

12.4.2更新命令用户界面消息控制函数 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.12 CMenu类 254

12.11 Apply按钮的处理过程 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.4寻找主框架窗口 261

13.3工具提示 261

13.2.4工具栏更新命令UI消息控制函数 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.3 CFrameWnd类和ActivateFrame成员函数 276

14.2 CPersistentFrame类 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

15.1.1 CView::GetDocument函数 291

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

第十五章 文档与视图的分离 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.2.1 Windows应用程序对象 336

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

16.2 SDI应用程序 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.3 EX16A——序列化SDI示例程序 342

16.2.10文档的“脏”标志 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.5试验用Explorer启动程序及拖放功能 356

16.4.4程序启动参数 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.9多文档模板 363

17.1.8载入和存储文档 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.2打印预览 379

18.1.3显示页和打印页 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

19.2多视图选择 395

19.1切分窗口 395

第十九章 切分窗口和多视图 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.1资源要求 401

19.6.2 CMainFrame 401

19.6 EX19C示例程序——切换没有切分的视图类 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从应用程序的菜单调用WinHelp 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.5帮助命令处理 420

20.4 MAKEHELP处理 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

21.1基本DLL理论 426

第二十一章 动态连接库 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.3 MFC扩展DLL资源搜索的顺序 432

21.2.2 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.4自定义控件通知消息 441

21.3.3 MFC库和WndProc函数 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.3 EX22C示例程序——一个MDI应用程序 458

22.2.2 CMainFrame类 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

第二十三章 组件对象模型 467

23.1 ActiveX技术背景 467

23.2.1 COM所解决的问题 468

23.2.2 COM的本质 468

23.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.3 Microsoft Excel--一种比Visual Basic还好的Visual Basic 505

24.2自动化客户和自动化组件 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.3.1 IStream接口成员函数 597

26.2.4进程间共享存储 597

26.3流(Stream)和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.3 IPersistStream编程 606

26.6.2 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.7包容器-组件相互作用 628

27.6.2实地组件调整大小的思路 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.9.1 IOleObject接口 634

27.8.3剪贴板图元文件 634

27.9接口简要说明 634

27.9.2 IViewObject2接口 635

27.9.3 IOleClientSite接口 635

27.9.4 LAdviseSink接口 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.5按ODBC模式使用DAO——快照和动态集 701

29.4利用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.2 CMainFrame和CChildFrame 709

29.11.3 CEx29aDoc 709

29.11.1 CEx29aApp 709

29.11.4 CEx29aView 716

29.11.5 CTableSelect 719

29.11.6 CIsamSelect 720

29.12 EX29A资源文件 721

29.13运行EX29A程序 722

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

30.2 Internet基础 725

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

第六部分 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.3对Windows进行网络配置 735

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

30.3.2网络硬件 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.2 EX30A服务器结构 749

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

30.5.1 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.2 MFC WinInet类 754

30.7.1 WinInet相对于Winsock的优势 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.9.1 Moniker 760

30.9.2 MFC CAsyncMonikerFile类 760

30.9.3在程序中使用CAsyncMonikerFile类 760

30.9异步Moniker文件 760

30.8.4测试WinInet Client #2 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.2一个简单的ISAPI服务器扩展GET请求 767

31.3.1通用网关接口和ISAPI 767

31.3 ISAPI服务器扩展 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.1 Cookie如何工作 778

31.6使用HTTP 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.2把事务数据发送到显示程序 783

31.9.1选择通知 783

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

31.9.3显示程序 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.3 EX32A第二阶段——加入WinInet调用 792

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

32.2.2调试ActiveX文档服务器 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