《MFC开发 Windows 95/NT 4应用程序》求取 ⇩

第1部分 Win32与面向对象编程1

第1章 面向对象编程与软件的可重用性1

1.1.1 从过程编程到面向对象编程1

1.1 面向对象编程综述1

1.1.2 继承(Inheritance)3

1.1.3 多态(Polymorphism)和虚拟方法(Virtual Methods)5

1.3 C++中的对象和类6

1.2 C++:对象连接(Object Connection)6

1.3.1 构造函数(Constructors)与析构函数(Destructors)8

1.4 代码重用(code Reuse)的优点8

1.6 模板9

1.5 类库9

1.4.1 停止重复开发9

1.7.1 动态链接库(DLLs)10

1.7 对象构件10

1.7.2 Visual Basic Extensions(VBXs)11

1.7.3 OLE Control Extensions(OCXs)11

1.8 小结11

2.2 剖析程序13

第2章 剖析Windows SDK程序13

2.1 面向对象Windows之前13

2.3 什么是Windows窗口14

2.4 Windows软件开发工具包(SDK)14

2.5 Windows应用程序设计接口(API)15

2.5.1 Win16和Win32API15

2.6 事件驱动程序设计和消息循环16

2.6.1 事件驱动模型16

2.7 WinMain( )函数19

2.8 窗口过程20

2.8.1 窗口类和窗口样式21

2.8.2 模块定义文件22

2.9 最小的SDK Windows程序23

2.9.1 剖析程序27

2.9.2 处理窗口过程中的消息28

2.10 修订的最小SDK Windows程序30

2.10.1 流线型的WinMain( )33

2.10.2 用Init Application( )初始化和注册窗口类33

2.11 小结34

2.10.3 用InitInstance( )创建应用程序窗口34

3.1 新的Windows Shell35

第3章 Windows编程问题35

3.1.1 Explorer35

3.2 Windows中的新概念37

3.2.1 进程与线程37

3.2.2 线程同步38

3.2.3 内存映像文件38

3.2.4 线程本地存储38

3.3 动态链接库39

3.2.5 信箱和管道39

3.4.5 进度栏控件40

3.4.4 列表视图控件40

3.4.3 图像列表控件40

3.4.2 热键控件40

3.4.1 动画控件40

3.4 Windows公用控件40

3.4.6 多功能编辑控件41

3.4.7 滑动控件42

3.4.8 旋转按钮控件42

3.4.9 状态栏控件42

3.4.10 标记控件43

3.4.11 工具栏控件43

3.5 Windows NT兼容性44

3.4.12 工具提示控件44

3.4.13 树型视图控件44

3.5.1 体面降级45

3.6 小结46

第4章 内存管理47

4.1.1 栈分配47

4.1 MFC内的内存管理47

4.1.2 堆分配48

4.2 32位内存页式管理48

4.2.1 32位地址空间和Windows 95内存范围(arenas)48

4.2.2 32位地址空间和Windows NT内存管理50

4.3 虚拟内存管理51

4.3.2 页映像51

4.3.1 分页文件51

4.3.3 空闲、保留和占用虚存52

4.3.4 页状态52

4.4 分配页53

4.4.1 Virtual Alloc( )函数53

4.5 内存一映像文件54

4.4.3 其他虚页函数54

4.4.2 保护页54

4.6.1 文件对象55

4.6 内存一映像文件的实现55

4.6.2 文件一映像对象55

4.6.3 文件视图映像56

4.7 小结57

第5章 Microsoft基本类库引论58

5.1 MFC前的AFX58

5.1.1 Application Framework(AFX)58

5.1.3 MFC的演变59

5.1.2 返回到绘图板59

5.3 在MFC内使用New Shell公用控件60

5.2 了解MFC设计要点60

5.4 硬件平台可移植性60

5.5 文档/视图结构61

5.6 MFC类层次61

5.7 CObject类:MFC的根62

5.7.1CObject服务62

5.7.2 CObject类方法63

5.8.1 数据、列表和映像类64

5.8 从CObject派生的MFC子系统64

5.8.6 控件支持65

5.8.5 Windows Sockets(插件)和Internet服务类65

5.8.4 文件和数据库类65

5.8.3 图形类65

5.8.2 调试和异常类65

5.8.7 菜单66

5.8.8 MFC应用程序结构类和同步类66

5.9 文档和视图68

5.9.1 文档模板68

5.9.2 窗口、对话框和控件类69

5.10 非CObject派生的MFC子系统71

5.10.1 OLE类72

5.10.3 支持类72

5.10.2 简单数据类型类72

5.10.4 同步类73

5.10.5 类型模板类73

5.11 两级对象构造73

5.12 最小MFC程序:MINMFC174

5.13 小结75

6.1 事件驱动程序设计77

第6章 消息与消息处理77

6.1.1 方法与消息77

6.2 了解消息77

6.2.1 MFC内的WinMain( )77

6.2.3 系统定义的消息80

6.2.2 消息结构80

6.2.4 用户定义的消息81

6.2.5 隐藏消息循环81

6.3 应用程序类简介:CWinApp84

6.4.1 窗口消息85

6.3.1 全局应用程序对象Helper函数85

6.4 消息处理程序85

6.4.2 控制通知消息86

6.4.3 命令消息86

6.5 消息映像86

6.5.1 透明地映像消息86

6.6 消息映像项与消息处理方法89

6.6.1 命令消息处理程序89

6.6.2 子窗口通知消息处理程序90

6.6.3 Windows消息处理程序92

6.6.4 用户定义的消息处理程序97

6.7 样本程序:最小消息映像App(MINMFC2)98

6.8 小结100

第7章 处理用户输入101

7.1 鼠标处理101

7.1.1 用户区鼠标消息101

7.1.2 鼠标捕捉102

7.1.3 非用户区鼠标消息105

7.2 键盘处理106

7.2.1 键盘消息107

7.2.2 虚键代码108

7.2.3 检测Shift状态和切换键109

7.2.4 Windows的字符键110

7.2.5 字符消息111

7.3 样本程序:鼠标和键盘键入(MOUSEKEY)112

7.3.1 检验应用程序头文件(MOUSEKEY.H)113

7.3.2 实现MOUSEKEY程序(MOUSEKDY.CPP)114

7.4 小结118

第8章 设备描述表和图形对象120

8.1 设备描述表120

8.1.1 图形设备接口120

8.2 MFC设备描述表类120

8.2.1 基类:CDC121

8.2.2 用类CPaintDC绘画124

8.2.3 用类CClientDC管理用户区125

8.2.4 用类CWindowDC管理框架窗口126

8.2.5 具有类CMetaFileDC的Windows元文件127

8.3 图形对象128

8.3.1 笔:类CPen129

8.3.2 刷子:类CPrush131

8.3.3 字体:类CFont132

8.3.5 调色板:类CPalette133

8.3.4 位图:类CBitmap133

8.3.6 区域:类CRgn134

8.4 小结135

9.1 GDI坐标系统136

第9章 矢量图形和正文136

9.1.1 逻辑映像方式137

9.1.2 建立映像方式137

9.1.3 CDC矢量图形方法139

9.1.4 绘图方式139

9.1.5 点140

9.1.6 绘制点141

9.1.7 线和多边形142

9.1.8 矩形145

9.1.9 区域149

9.1.10 多边形151

9.1.11 Bezier曲线151

9.1.12 元文件153

9.2 字体和正文157

9.2.2 TEXTMETRIC结构157

9.2.1 字体特征157

9.2.3 LOGFONT结构160

9.2.4 字体创建161

9.2.5 绘制正文162

9.3 样本程序:矢量图形和正文方法(VECTEXT1.EXE)164

9.4 小结165

10.1 光栅图形166

第10章 光栅图形和调色板166

10.1.1 位图166

10.1.2 设备相关位图(DDBs)167

10.1.3 设备无关位图(DIBs)168

10.1.4 CBitmap类168

10.1.6 传送和扭曲位图169

10.1.5 已命名的光栅操作(Named Raster Operations-ROPs)169

10.1.7 样本应用程序:RASTER1.EXE171

10.2 调色板和调色板管理172

10.2.1 颤动173

10.2.2 硬件调色板173

10.2.3 系统调色板173

10.2.4 逻辑调色板174

10.2.5 类CPalette175

10.2.7 样本程序:PALETTE1.EXE179

10.2.6 调色板消息179

10.3 小结183

第11章 有用的通用类184

11.1 字符串:使用类CString184

11.1.1 与C风格字符串兼容184

11.1.2 字符串赋值、连接、比较和析取185

11.1.3 字符串的序列化和缓冲区187

11.1.4 Unicode支持187

11.2 集合类188

11.2.1 集合形188

11.2.2 非样板为基集合类188

11.2.3 样板为基的集合类189

11.3 诊断服务190

11.3.1 通用诊断宏190

11.3.2 MFC通用诊断变量和函数191

11.4 日期和时间类192

11.3.3 MFC对象诊断函数192

11.5 小结193

12.1扩展MFC功能性195

12.2.1 CMainFrame类界面:MAINFRAM.H195

12.2 自定义框架窗口基类:CMainFrame195

第12章 定义你自己的类195

12.2.2初始化子窗口CreateChiled-Controls( )198

12.2.3 确定框架窗口的中心:Center-Window( )198

12.2.4 封装Win32API函数:GetWindows VerInfo( )199

12.2.5 显示Windows 版本信息:Show Windows VerInfo( )200

12.2.7 取用户区高宽:GetHeight( )202

12.2.8 将整数转换为字符串:IntTo-String( )202

12.2.9 将字符串转换为整数:StringTo-Int( )202

12.2.6 取用户区宽度:Get Width( )202

12.2.10 设置默认窗口颜色:SetClient-Backcolor( )203

12.2.11 用RGB颜色绘制用户区:Set-ClientColorRGB( )203

12.2.12 调整窗口背景涂色:OnErase-Bkgnd( )204

12.2.13 改变窗口的字体:SetWndFont( )204

12.2.14 改变子控件字体:SetChildFonts( )205

12.3 小结205

13.1 应用程序对象的作用207

第13章 框架窗口、文档及视图207

13.2 框架窗口对象208

13.2.1 框架窗口基类:CFrame Wnd209

13.2.2 窗口构造210

13.3 文档211

13.3.1 文档基类CDocument211

13.4 视图212

13.4.1 增强的CView派生类213

13.5.1 把类组合在一起214

13.5 文档模板214

13.5.2 文档模板基类:CDoc Template215

13.5.3 创建文档模板216

13.5.4 文档模板字符串216

13.6 文档/视图消息传递217

13.6.1 命令发送217

13.6.2 默认命令标识符及处理程序219

13.7 样本程序:最小的文档/视图应用程序(DOCVIEW1.EXE)220

13.7.1 应用程序类221

13.7.2 文档类224

13.7.3 框架窗口类225

13.7.4 视图类226

13.8 小结228

14.1 打印230

14.1.2 打印循环:CView::OnFilePrint( )230

14.1.1 设备无关性230

第14章 打印和打印预览230

14.1.3 准备打印231

14.1.4 CPrintInfo类结构232

14.1.5 Print对话框233

14.1.6 开始打印作业234

14.1.7 准备打印设备描述表234

14.1.8 打印作业234

14.1.9 清除235

14.2 打印预览235

14.2.1 CView::OnFilePrintPreview( )内部结构235

14.3 样本程序236

14.3.1 增加打印及打印预览236

14.3.2 调用打印预览239

14.4 小结239

第15章 按钮和滚动控件241

15.1 按钮控件:CButton类和CBitMapButton类242

15.1.1 按钮样式243

15.1.2 CButton和CBitmapButton类结构245

15.1.3 CButton和CBitmapButton消息245

15.1.5 创建和初始化按钮247

15.1.6 样本程序:使用每一种按钮样式248

18.2 动画控件:类CAnimateCtrl249

15.2 微调(spin)控件:CSpinButtonCtrl类254

15.2.1 微调控件样式255

15.2.2 CSpinButtonCtrl类结构256

15.2.3 CSpinButtonCtrl消息256

15.2.5 创建及初始化微调控件257

15.2.4 CSpinButtonCtrl类方法257

15.3 滚动条:CScrollBar类260

15.3.1 滚动条样式262

15.3.2 CScrollBar类结构262

15.3.3 CScrollBar消息263

15.3.4 CScrollBar类方法264

15.3.5 创建和初始化滚动条265

15.3.6 样本程序:滚动条266

15.4 滑动控件:CSliderCtrl类272

15.4.2 CSliderCtrl类结构273

15.4.1 滑动控件样式273

15.4.3 CSliderCtrl消息274

15.4.4 CSliderCtrl类方法275

15.4.5 创建和初始化滑动控件276

15.4.6 样本程序:滑动控件(SLIDERI)277

15.5 小结278

16.1 列表框控件:CListBox类280

第16章 列表框、编辑和组合框控件280

16.1.1 列表框样式281

16.1.2 CListBox类结构282

16.1.4 CListBox类方法284

16.1.3 CListBox消息284

16.1.5 创建和初始化CListBox对象287

16.1.6 样本程序:单选项和多选项文件列表框287

16.1.7 自绘列表框292

16.2 编辑控件:CEdit类293

16.2.1 编辑控件样式294

16.2.2 CEdit类结构296

16.2.3 CEdit消息297

16.2.4 CEdit类方法297

16.2.5创建和初始化编辑控件299

16.3 组合框控件:CComboBox类303

16.3.1 组合框样式304

16.3.2 CComboBox类结构305

16.3.4 CComboBox类方法308

16.3.6 样本程序:一个具有自绘颜色项的组合框310

16.3.5 创建和初始化组合框310

16.4 小结317

17.1.1 CImageList类结构318

17.1 图像列表控件:类 CImageList318

第17章 图像列表、列表视图、树视图、进度栏和热键控件318

17.1.2 CImageList类方法320

17.1.3 CImageList控件的创建及初始化320

17.2 列表视图控件:类CListCtrl321

17.2.1 列表视图控件样式323

17.2.3 CListCtrl类结构324

17.2.2 图像列表与列表视图控件324

17.3 列表视图项及其子项326

17.3.1 列表视图的通知(Notification)消息327

17.3.2 CListCtrl类方法328

17.3.3 创建及初始化CListCtrl对象329

17.3.4 使用列表视图控件329

17.4 树视图控件:类CTreeCtrl331

17.4.1 树视图控件样式332

17.4.2 CTreeCtrl类结构332

17.4.3 树视图通知消息334

17.4.4 CTreeCtrl类方法334

17.5 进度栏控件:类CProgressCtrl336

17.4.7 样本程序:TREELIST.EXE336

17.4.6 使用CTreeCtrl对象336

17.4.5 创建并初始化树视图控件336

17.5.1 CProgressCtrl类结构338

17.5.2 CProgressCtrl类方法338

17.5.3 创建并初始化CProgressCtrl对象339

17.5.4 使用进度控件339

17.6 热键控件:类CHotKeyCtrl339

17.6.1 CHotKeyCtrl类结构340

17.6.2 CHotKeyCtrl类方法341

17.6.3 创建并初始化CHotKeyCtrl对象341

17.6.4 使用热键控件341

17.7 小结342

18.1 制表控件:类CTabCtrl343

第18章 制表、动画和多功能编辑控件343

18.1.1 制表控件样式344

18.1.2 CTabCtrl类结构345

18.1.4 CTabCtrl类方法346

18.1.3 制表控件通知消息346

18.1.6 创建初始化一个制表控件347

18.1.5 制表项结构(TC-ITEM)347

18.1.7 使用制表控件348

18.2.1 动画控件样式351

18.2.2 CAnimateCtrl类结构351

18.2.3 动画控件通知消息352

18.2.4 CAnimateCtrl类方法352

18.2.5 创建和初始化一个动画控件352

18.2.6 使用动画控件352

18.4 多功能编辑控件:CRichEditCtrl类353

18.3.1 多功能编辑控件窗口样式354

18.3.2 CRichEdit类结构354

18.5 字符格式结构(CHARFORMAT)356

18.6 段落格式结构(PARAFORMAT)357

18.5.1 CRichEditCtrl类方法359

18.5.2 CRichEditCtrl行相关方法359

18.5.3 CRichEditCtrl文本选择方法359

18.5.5 CRichEditCtrl编辑方法360

18.5.4 CRichEditCtrl格式化方法360

18.5.6 CRichEditCtrl剪贴板方法360

18.5.7 CRichEditCtrl通用方法360

18.5.8 创建并初始化一个多功能编辑控件361

18.5.9 使用多功能编辑控件361

18.7 样本程序:TAB1.EXE362

18.6.1 决定显示对象363

18.6.2 按样式填充多功能编辑控件364

18.8 小结365

第19章 工具栏、状态栏和工具提示366

19.1 控件栏366

19.2.1 CToolBar类367

19.2 工具栏控件367

19.2.2 CToolBarCtrl类369

19.2.3 TBBUTTON结构370

19.2.5 工具栏按钮样式371

19.2.4 工具栏按钮状态371

19.2.6 CToolBarCtrl类结构372

19.2.7 工具栏通知消息373

19.2.8 CToolBarCtrl类方法374

19.2.9 创建和初始化工具栏控件375

19.2.10 使用CToolBarCtrl对象375

19.3.1 CStatusBar类376

19.3 状态栏(Status Bars)376

19.3.2 CStatusBarCtrl类378

19.3.3 CStatusBarCtrl类结构378

19.3.4 状态栏样式379

19.4 工具提示控件:类CToolTipCtrl380

19.3.5 创建并初始化状态栏控件380

19.4.1 TOOLTIPTEXT(工具提示文本)结构381

19.4.2 CToolTipCtrl类结构382

19.4.3 处理ToolTip的TTN NEEDTEXT通知383

19.4.4 CToolTipCtrl类方法383

19.4.5 创建并初始化ToolTip(工具提示)控件384

19.5 样本程序:CTRLBARI384

19.5.1 应用程序类(CMyApp)385

19.5.2 主框架窗口类(CMain Wnd)386

19.5.3 创建控件388

19.5.4 激活父窗口的工具提示390

19.5.5 ToolTip通知处理器390

19.5.6 更新状态栏并显示ToolTip391

19.5.7 改变工具栏和状态栏的大小392

19.6 小结392

20.2 派生新的控件类394

第20章 派生自定义控件394

20.1 新控件的设计考虑394

20.2.1 源文件395

20.2.2 增加新的数据成员395

20.2.3 定义新的控件类396

20.2.4 覆盖继承DrawItem( )类的方法398

20.2.5 绘制控件399

20.3 PANEL1程序:测试派生CPanel3dCtrl类405

20.4 小结408

第4部分 资409

第21章 图标、光标和位图409

21.1 将资源附加于可执行文件上410

21.2 从一个可执行文件中得到图像资源410

21.3 图标411

21.3.1 创建图标412

21.3.2 使用256色图标412

21.3.3 样本程序:用户区的图标(ICON1)413

21.4.2 使用256色光标418

21.4.3 使用动画光标418

21.4 光标418

21.4.4 样本程序:有方向的光标(CURSORI)418

21.4.1创建光标418

21.5 位图423

21.5.1 创建位图423

21.5.2 使用256色位图423

21.5.3 利用光线跟踪位图以获取超现实主义效果423

21.5.4 样本程序:开发位图资源(BITMAP1)424

21.6 小结428

第22章 菜单、加速器和字符串表430

22.1 菜单430

22.1.1 菜单消息431

22.1.2 菜单结构432

22.1.3 动态菜单434

22.1.4 CMenu类的结构434

22.1.5 CMenu类方法435

22.2.1 创建加速器437

22.2 加速器437

22.2.2 装入并使用加速器438

22.3 字符串表438

22.3.1 裁掉多余的439

22.3.2 自动装入资源440

22.4.2 应用程序头文件(MAST.H)441

22.4 样本程序:菜单、加速器和字符串表(MAST.EXE)441

22.4.1 公用资源标识符441

22.4.5 程序入口点:InitInstance( )443

22.4.3 实现MAST应用程序(MAST.CPP)443

22.4.4 CMain Wnd消息映像443

22.4.6 上下文菜单444

22.4.7 响应菜单命令445

22.5 小结446

23.1 查看版本信息448

第23章 版本信息和用户定义的资源448

23.1.1 版本信息资源449

23.1.2 版本资源结构449

23.1.3 在应用程序中使用版本信息453

23.2 用户自定义资源455

23.2.1 访问你的自定义数据456

23.2.2 一个用户定义资源样本:声波数据457

23.3 小结463

第24章 公用对话框464

24.1 MFC中的标准公用对话框465

24.1.1 公用对话框的错误检测465

24.1.2 基公用对话框:类CCornmDialog466

24.1.3 彩色对话框:类CColorDialog466

24.1.4 文件对话框:类CFileDialog468

24.1.5 Find和Replace对话框:类CFindReplaceDialog471

24.1.6 字体对话框:类CFontDialog474

24.1.7 打印对话框:类CPrintDialog475

24.1.8 页设置对话框:类CPageSetup-Dialog477

24.2 样本程序:使用公用对话框(DIALOG1.EXE)480

24.2.1 使用彩色公用对话框481

24.2.2 使用查寻、替换公用对话框481

24.2.3 使用打开公用对话框483

24.2. 5 使用打印公用对话框484

24.2.4 使用另存为作为公用对话框484

24.2.6 使用打印设置公用对话框485

24.2.7 使用页面设置公用对话框485

24.3 小结487

25.1 对话框基本概念488

25.1.1 对话框就是一个窗口488

第25章 自定义对话框和对话栏488

25.1.2 MFC对话框封套:类CDialog489

25.1.3创建对象CDialog489

25.1.4 对话控件490

25.1.5 模态对话框490

25.1.6 非模态式对话框490

25.1.7 对话框模板490

25.2 交换和验证对话框数据491

25.1.8 映像消息到对话类491

25.2.1更新数据492

25.2.2 对话数据交换:DDX492

25.2.4 类CDateExchange493

25.2.3 对话数据验证:DDV493

25.2.5 基于对话的应用程序494

25.3 对话栏:类CDialogBar494

25.3.1 对话栏控件样式495

25.4 样本程序:DLALOG2495

25.3.2 从对话栏得到消息495

25.3.3 创建和使用对话栏495

25.4.1 一个简单的About对话框类496

25.4.2 一个更有趣的对话类496

25.4.3 主框架窗口类503

25.5 小结505

26.1 属性工作表和属性页506

第26章 Windows向导506

26.1.1 类CPropertySheet和CPropertyPage506

26.1.2 向导引路和属性工作表的连接507

26.2 创建向导508

26.2.1 设置向导模式508

26.2.2 选择向导按钮508

26.2.5 单击Back按钮509

26.2.3 显示向导509

26.2.4 向导通知消息509

26.2.6 单击Next按钮509

26.3.1 创建向导属性页的对话模板资源510

26.3 样本程序:来看一下向导(Wizard1.exe)510

26.3.2 为每一个对话资源建立对话类510

26.3.3 开发“Welcome”页:类CIntroPage512

26.3.4 开发“About you”页:类CPagel515

26.3.5 更新CPage2和CPage3的向导信息519

26.3.6 创建和显示向导520

26.4 小结521

27.1 类CFile523

第27章 文件输入/输出和注册表523

27.1.1 CFile类结构523

27.1.2 CFile类方法525

27.3 CMemFile类528

27.3.1 CMemFile类方法528

27.2 类CStdioFile528

27.2.1 CStdilFile类方法528

27.4.1 CSharedFile类方法529

27.5 基本文件操作529

27.5.1 创建、打开、读和写文件529

27.4 类CSharedFile529

27.5.2 复制、移动、换名和删除文件530

27.5.3 样本程序:FILE1.EXE532

27.5.4 样本程序:KILLHR.EXE533

27.5.6 检查一个已存在的文件534

27.5.5 接受从Explorer或File Manager拖来的文件534

27.5.7 舍去硬返回535

27.6 Windows注册表537

27.7 初始化文件538

27.7.1 预定义注册表关键字538

27.7.2 注册表关键字和值539

27.7.3 应用程序状态信息539

27.7.4 注册表函数540

27.8 样本程序(WALLFLIP.EXE)541

27.8.1 应用程序头文件(WALLFLIP.H)541

27.8.2 类CWallFlipApp542

27.8.3 类CWallFlipDlg( )546

27.9 小结549

第6部分 高级Windows编程552

28.1.1 创建一个进程552

第28章 进程与线程552

28.1 进程552

28.1.2 关闭进程553

28.2 线程554

28.2.1 线程类型554

28.3 Win32中的多任务554

28.5 CWinThread类555

28.5.1 CWin Tbread类结构555

28.4 MFC下的多线程555

28.5.2 CWin Thread数据成员557

28.5.3 CWin Thread类方法557

28.5.4 全局线程帮助程序函数558

28.5.5 线程调度559

28.6 同步对象560

28.6.1 CSingleLock类560

28.6.2 CMultiLock类561

28.6.3 CSyncObject类561

28.6.5 CEvent类562

28.6.4 CCriticalSection类562

28.6.6 CMutex类563

28.7 使用CMutex对象563

28.8 样本程序(CURVES.EXE)564

28.7.1 CSetnaphore类564

28.8.1 CCurveThread类565

28.8.2 创建曲线线程570

28.9 小结570

29.2 基本异常语法572

29.1.1 关键字try,throw,catch572

29.1 处理异常572

第29章 异常和异常处理572

29.2.1 异常保护你的代码573

29.3 未处理的异常574

29.3.1 异常中的清除574

29.4 MFC异常575

29.4.1 CException类576

29.4.2 CArchiveException类576

29.4.3 CDaoException类577

29.4.4 CDBException类577

29.4.5 CFileException类578

29.4.6 CMemoryException类579

29.4.7 CNotSupportedException类579

29.4.8 COleDispatchException类579

29.4.11 CUserException类580

29.4.9 COleException类580

29.4.10 CResourceException类580

29.4.12 转换MFC异常到C++异常581

29.5 小结582

第30章 动态链接库设计与实现583

30.1 16位DLL583

30.2 32位DLL583

30.2.1 DLL的入口点:DLLMain( )函数584

30.2.2 使用C语言编写的DLL585

30.2.3 匹配引入和引出585

30.2.4 为DLL创建一个应用程序接口586

30.3 用MFC编写DLL586

30.3.1 常规型DLL587

30.3.2 扩展DLLs587

30.4.1 用C语言创建DSK DLL:DYNLINK1.DLL588

30.4 样本程序:DLLTESTI.EXE588

30.4.2 用MFC创建常规DLL:DYNLINK2.DLL590

30.4.3 用MFC创建扩展DLL:DYNLINK3.DLL592

30.5 小结595

第31章 组件对象模型(COM)、OLE和ActiveX596

31.1 OLE历史的简要回顾596

31.1.1 OLE1.0版596

31.1.2 OLE2.0版596

31.2.1 ActiveX SDK597

31.2 OLE的特性597

31.3 组件对象模型(COM)598

31.3.1 COM接口598

31.3.2 COM标识符598

31.4 IUnKnown接口599

31.4.1 查询接口600

31.5 IClassFactory接口601

31.5.1 注册表的作用601

32.4.2 引用计数601

31.5.2 分布式组件对象模型(DCOM)602

31.6 OLE602

31.6.1 OLE客户机和服务器603

31.7 MFC和OLE603

31.7.2 使用接口映像604

31.8 小结604

31.7.1 接口映像(Interface Map)604

第32章 OLE自动化606

32.1 IDispatch接口606

32.1.1 VARIANT数据类型607

32.1.2 IDispatch::Invoke( )方法608

32.1.4 OLE自动化服务器609

32.1.3 类型库609

32.2.2 调度映像(Dispatch Maps)610

32.2 MFC和OLE自动化610

32.2.1 MFC调度(Dispatch)标识符的分配610

32.3 OLE自动化服务器和控制器应用程序实例614

32.3.1 OLE自动化服务器的实现614

32.3.2 OLE自动化控制器的实现618

32.4 小结620

第33章 OLE控件622

33.1.2 MFC的OLE控件类622

33.1 OLE控件概述622

33.1.1 标准OLE控件特征622

33.1.3 COleControlModule类623

33.1.4 COleControl类624

33.1.5 COleControl类结构624

33.1.6 CPropertyPage类用于自包含的控件625

33.1.8 事件映像和库存事件626

33.1.7 属性页数据交换626

33.2.1 创建一个OLE控件框架627

33.2 一个OLE控件示例(PANEL3D.OCX)627

33.2.2 测试框架控件629

33.3 向框架中增加功能630

33.3.1 自定义项目资源631

33.3.2 属性页对话资源631

33.3.4 CPanel3dCtrl类接口634

33.3.3 CPanel3dCtrl类634

33.3.5 实现CPanel3dCtrl类636

33.3.6 CPanel3dPropPage类641

33.3.7 测试控件641

33.4 在一个样本程序中使用新控件641

33.4.1 把Panel3d控件添加到VB项目中642

34.1.1 超文档概念649

649

34.1.2 Windows帮助超文档650

34.2 帮助项目文件(.HPJ)651

34.2.1 定义Help项目文件段651

34.3 多格式文本文件(.RTF)657

34.3.1 使用Windows下的Word657

34.3.2 专用脚注符号657

34.4 交互式位图:分段超图形(.SHG)658

34.4.1 使用热点编辑器(SHED)659

34.4.2 通过引用来包含位图662

34.5 目录(Content)文件(.CNT)662

34.6 使用WinHelp宏和Windows动态链接库DLL663

34.8.1 HELPINFO结构664

34.8 上下文相关的Help664

34.7 在MFC中设置Help文件名664

34.9 直接调用WinHelp665

34.10 样本程序:一个联机Help样本程序(HELP1.EXE)666

34.10.1 映像Help主题到MFC应用程序构件667

34.10.2 一个示例Help项目文件(HELP1.HPJ)668

34.10.3 样本应用程序HELP1的结构和实现670

34.11 小结673

第7部分 Windows通信程序设计675

第35章 通信概念及实现途径675

35.1 通信技术背景675

35.1.1 网络675

35.1.2 客户机/服务器系统676

35.1.3 调制解调器676

35.2.2 Windows Sockets(WinSock)677

35.2 Windows通信概述677

35.2.1 商业工具677

35.2.3 Win32 Internet(WinInet)API678

35.2.4 微软的因特网客户机/服务器的结构678

35.2.5 因特网服务器API(ISAPI)679

35.2.6 ActiveX控件679

35.2.7 Messaging API(MAPI)679

35.3 通过代码签名的因特网的安全性680

35.3.1 涉及的安全性问题680

35.3.2 签暑你的代码681

35.3.3 考虑价格因素681

35.4 小结682

36.1.1 IP协议683

36.1.2 IP地址683

36.1 因特网协议集683

第36章 用WinSock通683

36.1.3 主机名685

36.1.4 数据报,端口和套接字685

36.2 Windows套接字概述686

36.2.1 建立套接字686

36.2.2 套接字结构686

36.2.3 伯克利套接字规范的Windows扩展687

36.3 MFC中的Windows Sockets689

36.3.1 CAsyncSocket类689

36.3.2 CAsyneSocket类方法689

36.3.3 创建和使用CAsyncSocket对象690

36.3.5 CSocket类方法691

36.3.4 CSocket类691

36.3.6 创建CSocket对象692

36.3.7 使用CSocket对象692

36.4 小结692

第37章 WinInet API和MFC WinInet类的使用693

37.1 WinInet API介绍693

37.1.1 使用 WinInet API的好处693

37.1.2 TCP/IP和Windows Sockets693

37.1.3 接口友好694

37.1.4 最新的API和安全保证(Safe Bet)694

37.1.5 熟悉的编程接口694

37.1.6 支持多线程694

37.1.7 数据缓存的支持694

37.2 句柄和函数694

37.3 通用WinInet函数695

37.4 WinInet FTP函数696

37.5 WinInet Gopher函数697

37.6 WinInet HTTP函数697

37.7 样本程序:RAWHTML.EXE698

37.7.1 CRawHtmlApp类698

37.7.2 CRawHtmlDlg对话框类和头文件HTMLDLG.H699

37.7.3 CRawHtmlDlg类的具体实现(HTMLDLG.CPP)700

37.7.4 初始化WinInet会话705

37.7.5 获取协议句柄706

37.7.6 打开文件707

37.7.7 查询信息709

37.7.8 读文件数据710

37.8.2 连接类711

37.8 MFC因特网扩展类711

37.8.1 CInternetSession类711

37.8.3 因特网文件类712

37.8.4 全局MFC因特网函数713

37.9 RAWHTML的修正样本程序:RAWHTM2.EXE713

37.10 小结716

第38章 创建ActiveX控件以激活Web页718

38.1 ActiveX控件概述718

38.1.1 OLE控件96规范718

38.2 ActiveX控件样本程序:JIGGLER.OCX719

38.2.1 创建一个OLE控件框架719

38.2.2 测试框架控件720

38.3 给框架添加功能720

38.3.2 属性页对话框资源721

38.3.1 自定义项目资源721

38.3.3 CJigglerCtrl类722

38.3.4 CJigglerCtrl类界面(JIGGLERC.H)722

38.3.5 实现CJigglerCtrl类723

38.3.6 CJigglerPropPage类730

38.4 在OLE Control Test Container中测试控件732

38.5 在一个简单网页上使用新控制732

38.5.1 创建一个简单的HTML网页733

38.5.2 将Jiggler控件加入网页734

38.5.3 用VBScript对Jiggler控件进行编程738

38.6 小结741

39.1.1 客户机应用程序742

第39章 用MAPI创建通邮的应用程序742

39.1 消息应用程序编程接口(MAPI)742

39.2 两种较高级的选择:简单的MAPI和CMC743

39.2.1 简单的MAPI743

39.2.2 公共消息调用(CMC)743

39.2.3 MapiMessage结构744

39.2.4 MapFileDesc结构745

39.3 MFC中有限的MAPI功能745

39.4 CDocument连接746

39.4.1 做MAPI的MFC方法746

39.4.2 CDocument::OnFileSendMail( )方法746

39.5 样本程序:MAPII.EXE750

39.6 小结753

附录A数据类型与Windows句柄754

A.1 简单数据类型(Simple Data Types)754

A.2 结构化的数据类型(Structured Data Types)755

A.3 句柄(Handles)755

附录B 窗口类与窗口样式757

B.1 窗口类结构757

B.2 窗口类样式759

B.3 窗口样式760

B.3.1 重叠式窗口761

B.3.2 弹出式窗口761

B.3.3 子窗口762

B.4窗口样式分组762

B.4.2 非客户域组件样式764

B.4.1 窗口边界样式764

B.4.3 初始窗口状态样式765

B.4.4 父与子窗口样式765

B.4.5 对话框样式765

B.4.6 扩展的窗口样式766

附录C Windows 95微标要求767

C.1 概述(Overview)767

C.2 对所有应用程序类型的要求767

C.3 基于文件应用程序的要求768

C.4 实用应用程序的要求769

C.4.1 实用应用程序的建议769

C.5 编译器与其他开发工具的要求770

D.2 迁移阶段771

D.1 MFC迁移包771

附录D 从C到MFC的迁移771

D.2.1 准备772

D.2.2 阶段1:迁移WinMain( )和WndProc( )代码772

D.2.3 阶段2:删除处理消息的开关语句773

D.2.4 阶段3:用MFC更进一步集成773

附录E 匈牙利记法775

E.1 匈牙利基类型和前缀(Hungarian Base Types and Prefixes)775

附录F MFC中Windows公共控件的通知消息777

F.1 Windows公共控件的通知777

F.2 通知消息结构777

F.3 通知过程的概述777

F.3.1 更好地处理通知的方案778

F.4 用ON_NOTIFY_RANGE指定通知域779

1998《MFC开发 Windows 95/NT 4应用程序》由于是年代较久的资料都绝版了,几乎不可能购买到实物。如果大家为了学习确实需要,可向博主求助其电子版PDF文件(由(美)Peter Norton,Rob McGregor 1998 北京:清华大学出版社 出版的版本) 。对合法合规的求助,我会当即受理并将下载地址发送给你。