VisualC++技术内幕(第4版)

VisualC++技术内幕(第4版)"

作者:潘爱民译
ISBN:9787302032434
定价:¥96
字数:千字
页数:
出版时间:1999.01.01
开本:
版次:1-11
装帧:
出版社:清华大学出版社
简介

前言

Visual C++自诞生以来,一直是Windows环境下最主要的应用开发系统。本书的第一版和第二版主要针对16位Windows应用程序的开发,以MFC 2.0和2.5为基础,向读者展示了Visual C++软件系统的魅力,而且在第二版中,还介绍了ODBC数据库管理以及OLE与自动化方面的高级编程技术。

    本书主要针对Visual C++ 5.0版本,以Windows NT 4.0与Windows 95或更高版本的32位Windows为操作系统平台,以MFC 4.21为基础,全面介绍了各种MFC类库应用程序的开发过程。由于Win32与Win16有着很大的差异,所以本书对以前的版本作了较大的修改,有些章节是完全重写的,如Win32内存管理、动态连接库编程、ActiveX控件等,但是在MFC基本框架方面又以继承为主,这就保证了读者在从16位环境转到32位环境时程序设计的连续性,也保证了原来的16位代码可以很方便地被移植到32位系统中来。但本书中,在讲述应用程序框架和文档-视图结构的过程中,涉及到了很多Win32的知识,以及Developer Studio环境提供的很多实用工具,包括AppWizard、ClassWizard等,因此,即使是熟练的程序员也有必要再阅读这些内容。

    除了基本的MFC应用框架知识外,本书还增加了一些新的内容。在数据库应用开发方面,Visual C++ 5.0除了支持原来的版本中就已经有的ODBC接口外,又增加了新的DAO(数据访问对象)接口,在MFC 4.21的支持下,用户可以快速建立数据库应用程序;上一版本介绍了OLE自动化的程序设计方法,随着这几年新技术的不断发展,Microsoft在COM和OLE的基础上又引入了ActiveX技术,本书用较多的篇幅介绍了ActiveX技术,通过这部分内容,读者不仅可领略到ActiveX技术的概貌,还可以学习一些深入的程序设计特性;除此之外,本书还介绍了Internet/Intranet程序设计技术,包括服务器软件和客户软件的编写以及IIS编程;最后,本书介绍了ActiveX文档技术,如果读者在从事网络方面的工作,那么相信这些内容可以为您提供基本的技术支持。

    Visual C++不仅仅是C++语言的集成开发环境,而且与Win32紧密相连,所以,利用Visual C++开发系统可以完成各种各样应用程序的开发,从底层软件直到上层直接面向用户的软件都可以用Visual C++来完成开发;而且Visual C++强大的调试功能也为大型复杂软件的开发提供了有效的排错手段。随着软件版本的不断升级,其功能也越来越强大,几乎包括了Windows应用的各个方面,所以Visual C++成了Windows系统平台上最强大的应用程序开发系统。本书从程序员的角度系统地介绍了Visual C++ 5.0的各项编程技术,向读者揭示了Visual C++ 5.0的技术要点,是Visual C++ 5.0的标准参考书,是一本不可多得的好书。

    本书基本上保持了前两个版本的结构和风格,但由于译者水平有限,难免有不妥之处。尤其是一些新技术术语,在译法上力求正确反映其实际含义又符合中文习惯。若有不当之处,还请读者见谅。

在以前三个版本的基础上,本书全面覆盖了Visual C++开发系统的各个方面,还涉及了Windows操作系统的32位编程的各项复杂技术。本书可以作为用Microsoft Visual C++开发Windows应用程序的标准参考书。

本书从Windows和Visual C++的基本技术出发,讲述了应用程序框架的技术细节,同时还包括以下一些技术:

■ 基础——事件控制、GDI、对话框、内存管理、SDI和MDI、打印和帮助

■ 高级话题——多线程、DIB、ODBC和DLL

■ ActiveX技术——ActiveX控件、COM、自动化、统一数据传输、结构化存储和复合文档技术

■ Internet编程——Winsock、MFC WinInet、ISAPI对IIS的扩展和ActiveX文档

*本书随附的光盘包含所有示例程序的源代码。

目录

前言29

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

第一章Microsoft Windows和Visual C++3

1.1Windows的编程模式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.6Win32应用程序编程接口5

1.2Visual C++的组成5

1.2.1Microsoft Developer Studio 97和创建过程6

1.2.2资源编辑器——Workspace ResourceView8

1.2.3C/C++编译器8

1.2.4资源编译器9

1.2.5连接器9

1.2.6调试器9

1.2.7AppWizard9

1.2.8ClassWizard10

1.2.9源程序浏览器10

1.2.10联机帮助11

1.2.11Windows诊断工具12

1.2.12源代码控制12

1.2.13Gallery12

1.2.14Microsoft基本类库4.21版13

1.2.15Microsoft ActiveX 模板库13

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

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

2.1.1学习曲线17

2.2什么是应用程序框架18

2.2.1应用程序框架和MFC库18

2.2.2应用程序框架示例18

2.3MFC库消息映射21

2.3.1文档和视图22

第二部分MFC库中的视图类

第三章从“Hello,world!\"着手学习AppWizard27

3.1什么是视图27

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

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

3.4CEx03aView视图类32

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

3.5.1OnDraw成员函数33

3.5.2Windows设备环境33

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

3.6资源编辑器简介35

3.6.1ex03a.rc的内容35

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

3.7Win32 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.5Windows的客户区域42

4.1.6CRect,CPoint和CSize类的运算43

4.1.7一个点是否在矩形内43

4.1.8CRect的LPRECT操作符43

4.1.9一个点是否在椭圆内44

4.2EX04A示例程序44

4.3对EX04A使用ClassWizard48

4.3.1同时使用AppWizard和ClassWizard49

4.4映射模式51

4.4.1MM-TEXT映射模式52

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

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

4.4.4坐标变换54

4.4.5EX04B示例程序——转换到MM-HIMETRIC映射模式56

4.5滚动视窗57

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

4.5.2滚动条58

4.5.3滚动方式的选择58

4.5.4OnInitialUpdate函数58

4.5.5接收键盘输入58

4.5.6EX04C滚动示例程序59

4.6其他Windows消息62

4.6.1WM-CREATE消息62

4.6.2WM-CLOSE消息63

4.6.3WM-QUERYENDSESSION消息63

4.6.4WM-DESTROY消息63

4.6.5WM-NCDESTROY消息63

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

5.1设备环境类64

5.1.1显示设备环境类CClientDC和CWindowDC65

5.1.2构造和析构CDC对象65

5.1.3设备环境的状态66

5.1.4CPaint DC类66

5.2GDI对象67

5.2.1GDI对象的构造与析构67

5.2.2跟踪GDI对象67

5.2.3库存的GDI对象68

5.2.4GDI选择的有效期69

5.3Windows的颜色映射70

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

5.3.2256色显示卡71

5.3.316位颜色显示卡71

5.3.424位颜色显示卡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.5EX05A示例程序75

5.5.1EX05A程序的组成元素78

5.6EX05B程序79

5.6.1EX05B程序的组成元素82

5.7EX05C示例程序——再次使用CScrollView82

5.7.1EX05C程序的组成元素86

5.7.2CScrollView的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.2ClassWizard和对话框类99

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

6.4.4深入理解EX06A应用程序104

6.5对话框程序的改进105

6.5.1获得OnOK退出控制106

6.5.2OnCancel处理107

6.5.3和滚动条控件挂上钩107

6.6控件的标识:CWnd指针和控件ID109

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

6.8在对话框窗口内绘图111

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

6.10利用其他的控件特性112

6.11Windows通用控件112

6.11.1进度指示器控件113

6.11.2滑杆条(Trackbar)控件113

6.11.3微调按钮控件114

6.11.4列表控件114

6.11.5树状控件114

6.11.6WM-NOTIFY消息115

6.12EX06B示例程序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无模式对话框的例子——EX07A127

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

73Windows通用对话框134

731直接使用CFileDialog类134

732从通用对话框类进行派生135

733嵌套对话框135

734使用CFileDialog的一个例子——EX07B135

735CFileDialog的其他可定制特性141

第八章使用ActiveX控件142

81ActiveX控件和普通的Windows控件142

811普通的Windows控件——参考体系142

812ActiveX控件与普通控件的相同点143

813ActiveX控件与普通控件的不同点——属性和方法143

82安装ActiveX控件144

83日历控件145

84ActiveX控件包容器编程147

841属性访问147

842ClassWizard为ActiveX控件产生的C++类148

843AppWizard对ActiveX控件的支持150

844ClassWizard和包容器对话框150

845对话框类数据成员和控件类的用法150

846映射ActiveX控件事件151

847把ActiveX控件锁定在内存里152

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

86ActiveX控件在HTML文件中的使用160

87在运行时创建ActiveX控件160

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

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

810图形属性165

811约束属性——改变通知166

812其他的ActiveX控件167

第九章Win32内存管理168

91进程和内存空间168

911Windows 95进程地址空间170

912Windows NT进程地址空间170

92虚拟内存如何工作170

93VirtualAlloc函数——占用和保留内存173

94Windows堆和GlobalAlloc函数族173

95小内存堆,C++的new和delete操作符,-heapmin174

96内存映射文件175

97访问资源176

98管理动态内存的一些提示177

99常量数据的优化存储177

第十章位图179

101GDI位图和与设备无关的位图179

102彩色位图和单色位图180

103使用GDI位图180

1031从资源中装入GDI位图180

1032显示映射模式的作用181

1033对位进行伸缩处理182

1034EX10A示例程序182

104利用位图改进屏幕显示185

1041EX10B示例程序185

1042Windows动画189

105DIB和CDib类190

1051关于调色板编程的术语190

1052DIB、象素和颜色表191

1053BMP文件中DIB的结构192

1054DIB访问函数193

1055CDib类193

1056DIB显示性能198

1057EX10C示例程序199

106进一步使用DIB202

1061LoadImage函数202

1062DrawDibDraw函数203

107在按钮上设置位图204

1071EX10D示例程序205

1072进一步使用位图按钮208

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

111Windows消息处理209

1111单线程程序处理消息的过程209

1112交出控制210

1113计时器210

1114EX11A示例程序211

112空状态处理214

113多线程编程215

1131编写辅助线程函数和启动线程215

1132主线程如何和辅助线程通话216

1133辅助线程如何和主线程通话217

1134EX11B示例程序217

1135用事件使线程同步219

1136EX11C示例程序219

1137线程阻塞221

1138排斥区222

1139互斥体(mutex)和信号(semaphore)223

11310用户界面线程(UI线程)224

第三部分文档视图结构

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

121主框架窗口和文档类227

122Windows的菜单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7MFC文本编辑选择233

1271CEditView类233

1272CRichEditView类233

1273CRichEditCtrl类233

128EX12A示例程序234

129属性表239

1291创建属性表239

1292属性表数据交换239

1210改进EX12A示例程序240

1211Apply按钮的处理过程254

1212CMenu类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5EX13A工具栏示例程序262

136状态栏267

1361状态栏的定义267

1362信息行268

1363状态指示器268

1364获得对状态栏的控制268

137EX13B状态栏示例程序269

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

141为什么可重用基类难以设计275

142CPersistentFrame类276

143CFrameWnd类和ActivateFrame成员函数276

144PreCreateWindow成员函数277

145Windows注册表278

146使用CString类280

147最大化窗口的位置281

148控制栏状态和注册表282

149静态数据成员282

1410默认窗口矩形282

1411EX14A示例程序283

1412MDI应用程序中的持续框架289

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

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

15.1.1CView∷GetDocument函数291

15.1.2CDocumeat∷Update AllViews函数292

15.1.3CView∷OnUpdate函数293

15.1.4CView∷OnInitialUpdate函数293

15.1.5CDocument∷OnNewDocument函数293

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

15.3CFormView类294

15.4CObject类295

15.5诊断信息转储296

15.5.1TRACE宏296

15.5.2afxDump对象296

15.5.3信息转储环境及CObject类297

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

15.6EX15A示例程序300

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

15.8CDocument∷DeleteContents函数308

15.9CObList集合类308

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

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

15.9.3CTypedPtrList模板集合类311

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

15.10EX15B示例程序313

15.10.1资源要求314

15.10.2代码要求315

15.10.3CStudentDoc316

15.10.4CStudentView320

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.6Serialize函数和应用程序框架336

16.2SDI应用程序336

16.2.1Windows应用程序对象336

16.2.2文档模板类337

16.2.3文档模板资源339

16.2.4SDI文档的多视图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.3EX16A——序列化SDI示例程序342

16.3.1CStudent343

16.3.2CEx16aApp343

16.3.3CFrameWnd348

16.3.4CStudentDoc352

16.3.5CStudentView353

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.1MDI应用程序357

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

17.1.2MDI应用程序对象360

17.1.3MDI文档模板类360

17.1.4MDI框架窗口和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.10Explorer启动及拖放364

17.2EX17A示例程序364

17.2.1CEx17aApp365

17.2.2CMainFrame370

17.2.3CChildFrame373

17.2.4测试EX17A应用程序376

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

18.1Windows的打印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.2CView∷OnPrint函数380

1833准备设备环境——CView∷OnPrepareDC函数380

1834打印任务的开始和结束381

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

18.5读取打印机矩形框388

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

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

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

19.1切分窗口395

19.2多视图选择395

19.3动态和静态切分窗口396

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

19.4.1与切分有关的资源397

19.4.2CMainFrame397

19.4.3测试EX19A应用程序398

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

19.5.1CHexView399

19.5.2CMainFrame400

19.5.3测试EX19B应用程序400

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

19.6.1资源要求401

19.6.2CMainFrame401

19.6.3测试EX19C应用程序403

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

1971资源要求404

19.7.2CEx19dApp404

19.7.3CMainFrame405

1974测试EX19D应用程序406

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

20.1Windows的WinHelp程序407

20.1.1复文本格式(RTF)407

20.1.2编写简单的帮助文件408

20.1.3改进的Table Of Contents412

202应用程序框架与WinHelp413

20.2.1调用WinHelp414

2022使用搜索字符串414

2023从应用程序的菜单调用WinHelp415

2024帮助上下文别名415

2025确定帮助上下文415

2026F1帮助416

2027Shift-F1 帮助416

2028消息框帮助——AfxMessageBox函数417

20.2.9一般的帮助417

203帮助示例——不需要任何编程418

204MAKEHELP处理420

205帮助命令处理420

20.5.1F1处理过程421

20.5.2ShiftF1处理过程421

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

20.6.1头文件要求422

20.6.2CStringView422

20.6.3CHexView423

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4DLL入口点——DllMain429

2115实例句柄——装载资源429

2116客户程序如何找到DLL430

2117调试DLL430

212MFC DLL——扩展的和正规的430

2121共享的MFC DLL和Windows DLL431

2122MFC扩展DLL——导出类432

2123MFC扩展DLL资源搜索的顺序432

2124EX21A示例程序——MFC扩展DLL433

2125EX21B示例程序——DLL测试客户程序435

2126MFC正规DLL——CWinApp派生类436

2127使用AFX-MANAGE-STATE宏436

2128MFC正规DLL资源搜索顺序436

2129EX21C示例程序——MFC正规DLL437

21210修改EX21B示例程序——加入代码以测试ex21c.dll438

213自定义控件DLL440

2131什么是自定义控件440

2132自定义控件的窗口类440

2133MFC库和WndProc函数441

2134自定义控件通知消息441

2135发送给控件的用户定义消息442

2136EX21D示例程序——自定义控件442

2137再修改EX21B示例程序——加入代码以测试ex21d.dll448

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

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

22.1.1应用程序类InitInstance函数454

22.1.2对话框类和程序图标455

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

22.2.1应用程序类InitInstance函数457

22.2.2CMainFrame类458

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

22.3.1应用类程序InitInstance函数459

22.3.2CMainFrame类460

22.3.3CChildFrame类462

22.3.4资源要求462

22.4定制(Custom) AppWizard463

第四部分ActiveX:组件对象模型、自动化和OLE

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

23.1ActiveX技术背景467

23.2组件对象模型(COM)468

23.2.1COM所解决的问题468

23.2.2COM的本质468

23.2.3什么是COM接口469

23.2.4IUnknown接口和QueryInterface成员函数473

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

23.2.6类厂(class factory)476

23.2.7CCmdTarget类477

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

23.3MFC库中实际的COM486

23.3.1COM的CoGetClassObject函数486

23.3.2COM和Windows注册表487

23.3.3运行时对象注册488

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

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

23.3.6MFC接口宏493

23.3.7MFC的COleObjectFactory类494

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

23.3.9MFC COM客户程序496

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

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

23.4包容、集合和继承502

第二十四章自动化504

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

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

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

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

24.5自动化所解决的问题508

24.6IDispatch接口508

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

24.8MFC IDispatch的实现510

24.9一个MFC自动化组件511

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

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

24.12VARIANT类型515

24.13COleVariant类517

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

24.15自动化示例521

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

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

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

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

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

24.16VBA早绑定562

24.16.1注册类型库563

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

24.16.3ODL文件564

24.16.4Excel如何使用类型库565

24.16.5为什么使用早绑定567

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

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

25.1IDataObject接口568

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

25.3FORMATETC和STGMEDIUM结构569

25.3.1FORMATETC569

25.3.2STGMEDIUM570

25.3.3IDataObject接口成员函数570

25.4MFC统一数据传输支持571

25.4.1COleDataSource类572

25.4.2COleDataObject类573

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

25.5MFC CRectTracker类576

25.5.1CRectTracker类成员函数576

25.5.2CRectTracker类矩形坐标转换577

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

25.6.1CMainFrame类578

25.6.2CEx25aDoc类578

25.6.3CEx25aView类578

25.7MFC拖放587

25.7.1传输的源方587

25.7.2传输的目标方587

25.7.3拖放的顺序588

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

25.8.1CEx25bDoc类589

25.8.2CEx25bView类589

25.9Windows应用程序和拖放——Dobjview592

第二十六章结构化存储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.1IStream接口成员函数597

26.3.2IStream编程598

26.4ILockBytes接口599

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

26.5.1菜单600

26.5.2CEx26aView类600

26.5.3辅助线程600

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

26.6.1IPersistStorage接口605

26.6.2IPersistStream接口606

26.6.3IPersistStream编程606

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

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

26.9复合文件碎片的处理617

26.10复合文件的其他优点618

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

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

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

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

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

27.5组件程序的MFC OLE结构622

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

27.6.1MDI嵌入组件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.1IOleObject接口634

27.9.2IViewObject2接口635

27.9.3IOleClientSite接口635

27.9.4IAdviseSink接口636

27.10OLE辅助函数636

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

27.11.1MFC对OLE包容器的支持637

27.11.2一些包容器限制638

27.11.3包容器特性638

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

27.12.1CEx27bView类639

27.12.2CEx27bDoc类652

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

27.13.1CEx27cView类661

27.13.2CEx27cDoc类661

第五部分数据库管理

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

28.1数据库管理的优势671

28.2结构化查询语言672

28.3ODBC标准673

28.3.1ODBC结构673

28.3.2ODBC SDK编程674

28.4MFC ODBC类——CRecordset和CDatabase675

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

28.4.2处理ODBC异常677

28.5学生注册数据库678

28.6EX28A记录集示例程序678

28.7EX28A示例程序中的元素684

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

28.7.2CEx28aView类的OnInitialUpdate成员函数684

28.7.3CEx28aView类的OnDraw成员函数685

28.8筛选器和排序字符串686

28.9连接两个数据库表686

28.10MFC CRecordView类687

28.11EX28B记录查看示例程序688

28.12多记录集693

28.12.1EX28C多记录集示例程序694

28.12.2参数化查询695

28.13ODBC多线程696

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

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

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

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

29.2DAO和VBA699

29.3DAO和MFC700

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

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

29.6DAO表类型记录集702

29.7DAO QueryDef和TableDef703

29.8DAO多线程情况703

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

29.9.1滚动显示方法703

29.9.2一个行-视图类704

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

29.9.4CRowView的纯虚成员函数706

29.9.5其他的CRowView函数706

29.10动态记录集的编程707

29.11EX29A示例程序708

29.11.1CEx29aApp709

29.11.2CMainFrame和CChildFrame709

29.11.3CEx29aDoc709

29.11.4CEx29aView716

29.11.5CTableSelect719

29.11.6CIsamSelect720

29.12EX29A资源文件721

29.13运行EX29A程序722

第六部分Internet程序设计

第三十章TCP/IP、Winsock和WinInet725

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

30.2Internet基础725

30.2.1网络协议——层726

30.2.2Internet协议726

30.2.3用户报文协议727

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

30.2.5传输控制协议729

30.2.6域名系统(Domain Name System)730

30.2.7HTTP基础732

30.2.8FTP基础734

30.2.9Internet和Intranet734

30.3建立自己的价值S| 99 的Intranet734

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

30.3.2网络硬件735

30.3.3对Windows进行网络配置735

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

30.3.5测试Intranet——Ping程序736

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

30.4Winsock737

30.4.1同步和异步Winsock编程737

30.4.2MFC Winsock类737

30.4.3Blocking Socket类737

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

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

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

30.5.1EX30A服务器限制749

30.5.2EX30A服务器结构749

30.5.3使用Win32 TransmitFile函数750

30.5.4编译和测试EX30A751

30.5.5使用Telnet752

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

30.6.1EX30A Winsock客户752

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

30.6.3测试EX30A Winsock客户753

30.7WinInet753

30.7.1WinInet相对于Winsock的优势754

30.7.2MFC WinInet类754

30.7.3Internet会话状态回调756

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

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

30.8.1EX30A WinInet Client #1——使用CHttpConnection758

30.8.2测试WinInet Client #1758

30.8.3EX30A WinInet Client #2——使用OpenURL759

30.8.4测试WinInet Client #2760

30.9异步Moniker文件760

30.9.1Moniker760

30.9.2MFC CAsyncMonikerFile类760

30.9.3在程序中使用CAsyncMonikerFile类760

30.9.4异步moniker文件和WinInet编程761

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

31.1IIS的替代产品763

31.2Microsoft IIS763

31.2.1安装和控制IIS763

31.2.2运行Internet Service Manager764

31.2.3IIS的安全性764

31.2.4IIS765

31.2.5IIS日志记录766

31.2.6测试IIS766

31.3ISAPI服务器扩展767

31.3.1通用网关接口和ISAPI767

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

31.3.3HTML窗体——GET和POST768

31.3.4编写ISAPI服务器扩展DLL769

31.3.5MFC ISAPI服务器扩展类770

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

31.4.1第一步——获取定单772

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

31.4.3编译并测试ex31a.dll776

31.4.4调试EX31A DLL776

31.5ISAPI 数据库访问777

31.6使用HTTP Cookie来连接事务778

31.6.1Cookie如何工作778

31.6.2ISAPI服务器扩展如何处理Cookie779

31.6.3使用Cookie的一些问题779

31.7WWW鉴定779

31.7.1基本鉴定779

31.7.2Windows NT问讯/应答鉴定780

31.7.3安全套接字层(SSL)780

31.8ISAPI过滤器781

31.8.1编写ISAPI过滤器DLL781

31.8.2MFC ISAPI过滤器类781

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

31.9.1选择通知783

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

31.9.3显示程序785

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

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

32.1ActiveX文档理论787

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

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

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

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

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

32.2ActiveX文档服务器示例程序EX32A791

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

32.2.2调试ActiveX文档服务器792

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

32.3ActiveX文档服务器示例程序EX32B794

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

32.3.2EX32B视图类800

32.3.3编译并测试EX32B802

32.3.4ActiveX文档服务器和VB Script802

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

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

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

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个