标题：VisualC++2008完全学习手册
图书简介
本书介绍Visual C++ 2008支持的两种版本的C++，详细介绍两种风格的C++语言，使用微软基本类MFC开发本地的ISO/ANSI C++ Windows应用程序，使用Windows Forms开发C++/CLI Windows应用程序。本书共分4篇，分别介绍Visual C++ 2008基础知识、C++面向对象的程序开发、Windows应用程序开发和数据库访问等内容。配套光盘提供了教学视频和实例源文件。
本书可以作为Visual C++ 2008的基础学习书籍，也可以帮助中级读者提高技能，顺利掌握编程应用实践知识。
前言
微软开发的Visual Studio 2008支持两种截然不同但又紧密相关的C++语言：ISO/ANSI标准C++和C++/CLI。ISO/ANSI是标准C++，它是在20世纪80年代早期开发的，是一种基于C的面向对象语言，所以这两种语言有许多共同的语法和功能，但是C++要比其前身丰富得多，用途也广泛得多。标准C++主要用于开发本地计算机上运行的高性能应用程序。C++/CLI由微软公司开发，现在是ECMA标准，它是专门为.NET Framework开发的。
本书使用Visual C++ 2008支持的两种技术，讲授C++编程的基础知识。详细介绍了两种C++语言，使用微软基本类MFC开发本地的ISO/ANSI C++Windows应用程序，使用Windows Forms开发的C++/CLI Windows应用程序等。
由于当前信息化时代中大量地使用数据库，本书还介绍了用于MFC和Windows Forms应用程序中访问数据源的技术。与Windows Forms应用程序相比，MFC应用程序需要编写大量的代码来实现希望的功能，而Windows Forms程序经常只需要编写很少的代码，有时甚至不用编写代码。因此，本书重点介绍了MFC编程，而非Windows Forms编程。
1．本书内容
本书介绍Visual C++ 2008支持的两种不同版本的C++，详细介绍了两种风格的C++语言，使用Microsoft基本类MFC开发本地的ISO/ANSI C++ Windows应用程序，使用Windows Forms开发C++/CLI Windows应用程序等。本书共分为4篇，分别是Visual C++ 2008基础知识、C++面向对象的程序开发、Windows应用程序开发、数据库访问。各篇主要内容如下。
第1篇：Visual C++ 2008基础知识（第1～7章）。首先介绍使用C++编写本地应用程序和.NET Framework应用程序所需要理解的基本概念，以及在Visual C++ 2008开发环境中体现的主要思想。第2～7章专门讲授两个C++语言版本。
第2篇：C++面向对象的程序开发（第8～12章）。本篇介绍了什么是面向对象的程序开发，以及面向对象的程序设计的主要特性。最后介绍如何使用标准模板库STL。
第3篇：Windows应用程序开发（第13～20章）。本篇是本书的重点之一，首先介绍创建Windows应用程序的几种方式，然后重点介绍如何使用MFC开发本地的Windows应用程序，并使用C++/CLI创建了Windows应用程序。
第4篇：数据库访问（第21～22章）。本篇首先使用MFC创建访问数据库的Windows应用程序，然后使用Windows Forms进行高度的可视化数据库编程。
2．本书特色
本书中采用大量的实例进行讲解，力求通过实际操作使读者更容易地掌握Visual C++ 2008的知识。本书难度适中，内容由浅入深，实用性强，覆盖面广，条理清晰。
? 知识点全  本书紧紧围绕Visual C++ 2008的实际应用、管理与开发展开讲解，具有很强的逻辑性和系统性。
? 基于理论，注重实践  在讲述过程中，不仅仅只介绍理论知识，而且在合适位置安排具有代表性、操作性强的综合应用，将理论应用到实践当中，来加强读者的实际应用能力，巩固Visual C++的理论知识。
? 快速掌握  注重技术原理和实际应用的高度融合，通过循序渐进的内容组织，以及大量来自工作现场的应用案例，帮助读者快速掌握和应用Visual C++ 2008编程技术。
? 随书光盘  本书为实例配备了视频教学文件，读者可以通过视频文件更加直观地学习Visual C++ 2008的使用知识。
? 网站技术支持  读者在学习或者工作的过程中，如果遇到实际问题，可以直接登录www-itzcn-com与我们联系，作者会在第一时间内给予帮助。
3．读者对象
本书具有知识全面、实例精彩、指导性强的特点，力求以全面的知识及丰富的实例来指导读者透彻地学习Visual C++ 2008各方面的知识。本书可以作为Visual C++ 2008的入门书籍，也可以帮助中级读者提高技能，对高级读者也有一定的启发意义。
本书适合以下人员阅读学习。
? 希望学习C++语言的初学者。
? 了解C++并希望使用C++开发Windows应用程序者。
? 各大中专院校的在校学生和相关授课老师。
目录
第一篇  Visual C++ 2008基础知识
第1章  开始使用Visual C++ 2008 1
1.1  .NET Framework 3.5 1
1.1.1  什么是.NET Framework 1
1.1.2  公共语言运行库CLR 2
1.1.3  .NET Framework类库 2
1.1.4  .NET Framework 3.5的新功能 3
1.2  C++应用程序 3
1.3  Visual C++ 2008与Visual Studio 2008 4
1.4  控制台应用程序 7
1.4.1  Win32控制台应用程序 7
1.4.2  创建CLR控制台程序 10
1.5  创建Windows应用程序 11
1.5.1  创建MFC应用程序 12
1.5.2  创建Windows Forms应用程序 13
第2章  变量和表达式 15
2.1  C++的基本语法 15
2.1.1  程序的结构 15
2.1.2  注释 18
2.1.3  #include指令 19
2.1.4  命名空间 19
2.1.5  程序块 20
2.2  变量和常量 21
2.2.1  定义变量 21
2.2.2  常量和符号常量 22
2.3  基本数据类型 23
2.3.1  整型 23
2.3.2  字符类型 24
2.3.3  布尔类型 25
2.3.4  浮点类型 25
2.3.5  定义数据类型的别名 26
2.4  输入与输出表达式 26
2.4.1  标准I/O流 27
2.4.2  格式化输出 27
2.5  运算符与表达式 31
2.5.1  算术运算 31
2.5.2  赋值运算 36
2.5.3  逗号运算 37
2.5.4  关系运算 38
2.5.5  逻辑运算 39
2.5.6  位运算 41
2.6  C++/CLI的应用（托管C++） 43
2.6.1  C++/CLI的基本数据类型 43
2.6.2  C++/CLI格式化输出 45
2.6.3  C++/CLI的键盘输入 47
2.6.4  safe_cast安全类型转换 47
第3章  流程控制结构 48
3.1  条件语句 48
3.1.1  if语句 48
3.1.2  条件运算符 53
3.1.3  switch语句 54
3.2  循环语句 56
3.2.1  while语句 57
3.2.2  do-while语句 59
3.2.3  for语句 60
3.2.4  嵌套循环 62
3.3  跳转结构 63
3.3.1  break语句 63
3.3.2  continue语句 65
3.3.3  goto语句 67
3.4  C++/CLI的应用 68
第4章  数组和字符串 71
4.1  数组概述 71
4.1.1  定义数组 71
4.1.2  引用数组元素 72
4.1.3  初始化 73
4.2  多维数据 74
4.2.1  多维数组的定义 75
4.2.2  多维数组的初始化 76
4.3  数组的应用 78
4.3.1  排序 78
4.3.2  倒置矩阵 84
4.4  字符数组和字符串 85
4.4.1  字符数组 85
4.4.2  string字符串 86
4.4.3  使用string字符串 87
4.4.4  Unicode字符串 92
4.5  C++/CLI的应用 92
4.5.1  CLR数组 92
4.5.2  CLR字符串 95
第5章  函数 97
5.1  函数的定义 97
5.2  函数的参数和返回值 98
5.2.1  实参与形参 98
5.2.2  函数的返回值 101
5.2.3  使用const修饰符的函数形参 102
5.3  函数的调用 102
5.3.1  函数调用机制 103
5.3.2  函数原型 104
5.4  函数的递归调用 105
5.5  函数的默认参数值 108
5.6  函数和数组 109
5.7  函数与变量的作用域 111
5.7.1  局部变量 111
5.7.2  全局变量 113
5.8  变量的生存期 114
5.8.1  自动变量 115
5.8.2  静态变量 116
5.9  函数的重载 117
5.10  函数模板 119
5.11  C++/CLI的应用 122
5.11.1  接收数量可变的实参 122
5.11.2  泛型函数 123
第6章  指针与引用 126
6.1  指针的概念 126
6.2  声明指针变量 126
6.3  指针运算符 127
6.3.1  取地址运算符 127
6.3.2  间接运算符 128
6.4  指针变量的初始化 129
6.5  指针和数组 130
6.5.1  使用指针法引用数组元素 130
6.5.2  使用指针处理多维数组 133
6.6  指针和函数 135
6.6.1  作为形参的指针 135
6.6.2  返回指针的函数 137
6.6.3  函数指针 139
6.7  常量指针和指针常量 140
6.7.1  指向常量的指针 140
6.7.2  指针常量 142
6.8  指向char类型的指针变量 143
6.9  动态内存的分配 145
6.9.1  堆与new和delete运算符 145
6.9.2  数组的动态分配内存 146
6.10  引用 149
6.11  C++/CLI中的指针与引用 151
6.11.1  跟踪句柄 151
6.11.2  跟踪引用 153
第7章  程序文件和预处理指令 154
7.1  使用头文件 154
7.2  外部名称 156
7.3  命名空间 157
7.3.1  声明命名空间 157
7.3.2  未指定名称的命名空间 159
7.3.3  嵌套的命名空间 160
7.4  预处理指令 160
7.4.1  文件包含 160
7.4.2  宏定义 161
7.4.3  条件编译 162
7.4.4  #error和#pragma指令 164
第二篇  C++面向对象的程序开发
第8章  自定义数据类型 167
8.1  结构 167
8.1.1  定义结构 167
8.1.2  访问结构成员 168
8.1.3  结构与指针 169
8.2  联合 171
8.2.1  定义联合 172
8.2.2  匿名联合 173
8.3  枚举 174
8.4  类的概念与定义 175
8.4.1  定义类 176
8.4.2  创建类的对象 176
8.4.3  访问类的数据成员 177
8.4.4  为类添加成员函数 178
8.5  类的构造函数 180
8.5.1  构造函数的使用 180
8.5.2  类的默认构造函数 182
8.5.3  默认的初始化值 184
8.5.4  构造函数中的初始化列表 186
8.6  类的析构函数 186
8.7  类的私有成员 189
8.8  C++/CLI中的枚举 191
8.9  C++/CLI中的类和对象 193
8.9.1  数值类类型 193
8.9.2  引用类类型 195
8.9.3  类属性 197
第9章  类的更多功能 203
9.1  对象数组 203
9.2  对象的指针与引用 205
9.2.1  对象的指针 205
9.2.2  对象的引用 207
9.3  this指针 207
9.4  类的静态成员 209
9.4.1  静态数据成员 209
9.4.2  静态成员函数 211
9.5  复制构造函数 212
9.6  类的友元 215
9.6.1  类的友元函数 216
9.6.2  友元类 219
9.7  重载运算符重载 220
9.7.1  重载运算符的概述 220
9.7.2  重载双目运算符 221
9.7.3  重载增量运算符 223
9.8  类模板 224
9.8.1  定义类模板 225
9.8.2  根据类模板创建对象 227
9.9  C++/CLI的应用 231
9.9.1  在数值类中重载运算符 231
9.9.2  重载数值类的递增和递减运
算符 233
9.9.3  重载引用类运算符 234
第10章  继承与多态性 236
10.1  继承的基本概念 236
10.1.1  类的层次关系 236
10.1.2  派生类对象的结构 238
10.2  继承机制下的访问控制 238
10.2.1  访问父类成员 239
10.2.2  继承方式 243
10.3  派生类的构造函数 246
10.4  派生类的析构函数 248
10.5  派生类的复制构造函数 249
10.6  多重继承 252
10.7  在相关的类类型之间转换 254
10.8  理解多态性 256
10.8.1  虚函数 257
10.8.2  使用虚函数的原则 260
10.9  纯虚函数和抽象类 263
10.9.1  纯虚函数 263
10.9.2  抽象类 263
10.10  C++/CLI的应用 265
10.10.1  装箱与拆箱 265
10.10.2  C++/CLI中的继承 266
10.10.3  接口类 268
10.10.4  委托和事件 270
第11章  标准模板库 277
11.1  标准模板库概述 277
11.1.1  STL容器 277
11.1.2  STL迭代器 280
11.1.3  STL算法 281
11.1.4  STL头文件 281
11.2  顺序容器 282
11.2.1  vector顺序容器 282
11.2.2  deque顺序容器 289
11.2.3  使用list容器 290
11.3  容器适配器 292
11.3.1  队列容器 292
11.3.2  优先级容器 294
11.3.3  堆栈容器 296
11.4  关联容器 298
11.4.1  使用映射容器 298
11.4.2  使用多重映射容器 301
11.5  迭代器 303
11.5.1  输入流迭代器 303
11.5.2  输出流迭代器 304
11.5.3  插入迭代器 305
11.6  算法 307
11.6.1  fill、fill_n、generate与
generate_n 307
11.6.2  数学算法 308
11.7  C++/CLI中的STL 309
11.7.1  STL/CLR顺序容器 309
11.7.2  STL/CLR关联容器 311
第12章  异常处理 314
12.1  异常的概念 314
12.2  捕获异常 315
12.2.1  try-catch块 316
12.2.2  捕获所有的异常 318
12.3  抛出异常的函数 319
12.4  标准异常类 320
12.5  MFC异常 321
第三篇  Windows应用程序开发
第13章  创建Windows应用程序 323
13.1  认识Windows应用程序 323
13.1.1  窗口 323
13.1.2  Windows程序的工作过程 324
13.1.3  Windows API 325
13.2  Windows程序结构 325
13.2.1  Windows数据类型 325
13.2.2  入口函数 327
13.2.3  窗口过程函数 335
13.2.4  一个简单Windows程序 337
13.3  使用MFC 339
13.4  使用Windows Forms 342
第14章  使用MFC创建Windows程序 344
14.1  MFC概述 344
14.1.1  MFC和Win32 344
14.1.2  MFC类库 345
14.1.3  MFC应用程序的运行 346
14.1.4  MFC中的全局函数 347
14.2  创建MFC应用程序 347
14.2.1  创建SimpleEditor应用程序 347
14.2.2  管理项目 351
14.3  代码分析 352
14.3.1  应用程序类CSimpleEditorApp 352
14.3.2  主框架窗口类CMainFrame 355
14.3.3  文档类CSimpleEditor 356
14.3.4  视图类CSimpleEditorView 357
14.3.5  预编译头文件stdafx.h 359
第15章  消息和命令 360
15.1  与Windows进行通信 360
15.1.1  了解消息映射 360
15.1.2  处理不同类型的消息 362
15.2  获取鼠标输入 363
15.2.1  客户区鼠标消息 363
15.2.2  非客户区鼠标消息 368
15.2.3  WM_NCHITTEST消息 370
15.2.4  鼠标滚轮消息 370
15.2.5  捕获鼠标 372
15.3  获取键盘输入 373
15.3.1  输入焦点 373
15.3.2  按键消息 373
15.3.3  字符消息 375
15.3.4  插入符 376
15.4  定时器消息 380
15.4.1  WM_TIMER消息 380
15.4.2  回调函数设置定时器 382
15.5  自定义消息 383
第16章  菜单 386
16.1  菜单 386
16.1.1  利用资源编辑器编辑菜单 386
16.1.2  菜单消息 389
16.1.3  添加消息处理代码 390
16.1.4  菜单命令范围 393
16.1.5  更新菜单项 394
16.1.6  菜单更新范围 396
16.2  快捷键 397
16.3  动态更改菜单 398
16.3.1  手工编辑创建菜单 398
16.3.2  修改现有菜单 399
16.3.3  系统菜单 401
16.4  快捷菜单 401
16.5  在C++/CLI程序中使用菜单 403
16.5.1  理解Windows Forms应用程序 403
16.5.2  MDI窗口 406
16.5.3  活动子窗体 408
16.5.4  排列子窗体 411
16.5.5  合并菜单 412
16.5.6  替换和删除菜单 415
16.5.7  快捷菜单 417
第17章  在窗口中绘图 419
17.1  Windows GDI 419
17.1.1  MFC设备描述表类 419
17.1.2  设备描述表的属性 420
17.1.3  绘图模式 421
17.1.4  映射模式 422
17.1.5  移动坐标原点 423
17.1.6  获取设备信息 424
17.2  用GDI绘图 425
17.2.1  应用程序中的视图类 425
17.2.2  绘制直线和曲线 426
17.2.3  绘制椭圆和矩形 429
17.2.4  画笔 429
17.2.5  画刷 431
17.2.6  绘制文本 432
17.2.7  字体 434
17.2.8  预定义对象 438
17.3  使用鼠标绘图 439
17.3.1  绘制图形分析 439
17.3.2  创建绘图类 440
17.3.3  完成基类CShape 442
17.3.4  绘制直线 443
17.3.5  完成其他派生类 444
17.3.6  创建绘图类对象 447
17.3.7  捕获鼠标消息 452
17.3.8  保存绘图对象 453
17.4  使用GDI+绘图 454
17.4.1  了解GDI+ 454
17.4.2  图形操作 455
17.4.3  坐标和区域 458
17.4.4  使用Font类绘制文本 459
17.4.5  图像操作 462
第18章  对话框和控件 464
18.1  理解对话框和控件 464
18.2  传统控件 465
18.2.1  CButton类 465
18.2.2  CListBox类 469
18.2.3  CStatic类 471
18.2.4  CEdit类 472
18.2.5  CComboBox类 475
18.2.6  CScrollBar类 477
18.3  高级控件编辑 478
18.3.1  添加键盘接口 478
18.3.2  修改控件行为 479
18.4  对话框 480
18.4.1  对话框模板 480
18.4.2  CDialog类 483
18.4.3  创建模式对话框 484
18.4.4  创建无模式对话框 486
18.4.5  对话框数据交换与校验 487
18.4.6  与对话框控件的交互 490
18.5  AddressBook程序 491
18.6  基于对话框的程序 495
18.6.1  计算器程序分析 496
18.6.2  设计MyCalculator类 497
18.6.3  设计对话框类CCalculatorDlg 498
18.7  通用对话框 502
18.7.1  文件对话框类 502
18.7.2  字体对话框类 503
18.7.3  颜色对话框类 504
18.7.4  打印对话框类 504
18.8  Windows Forms窗体 505
18.9  Windows Forms控件 506
18.9.1  控件类 506
18.9.2  Button控件 508
18.9.3  RadioButton和CheckBox控件 509
18.9.4  GroupBox控件 510
18.9.5  Label和LinkLabel控件 510
18.9.6  TextBox控件 511
18.9.7  RichTextBox控件 515
18.9.8  ListBox和CheckedListBox
控件 517
第19章  文件和串行化 519
19.1  操作文件的几种方式 519
19.1.1  使用CRT函数std::fxxx() 519
19.1.2  使用标准C++库std::fstream 521
19.1.3  使用Windows API函数 523
19.2  CFile类 525
19.2.1  打开、关闭和创建文件 525
19.2.2  文件的读和写 528
19.2.3  CFile类的派生类 529
19.3  串行化 530
19.3.1  串行化基础 530
19.3.2  创建可串行化类 532
19.3.3  为AddressBook程序添加串行化
功能 532
19.4  访问XML文件 535
19.4.1  XML文档 535
19.4.2  解析XML文档 540
19.4.3  选择节点 546
19.5  CLR中的文件操作 552
19.6  路径、目录和文件 553
19.6.1  Directory和File类 553
19.6.2  DirectoryInfo和FileInfo类 555
19.7  流和存取文件 557
19.7.1  FileStream对象 557
19.7.2  StreamReader类 560
19.7.3  StreamWriter类 561
19.8  访问二进制文件 562
第20章  动态链接库与钩子 564
20.1  了解DLL 564
20.2  静态链接库 566
20.3  常规DLL 568
20.3.1  一个简单的常规DLL 569
20.3.2  声明导出函数 571
20.3.3  DLL的调用方式 573
20.3.4  调用约定与名称改编 574
20.3.5  导出变量 575
20.3.6  导出类 576
20.3.7  DLL的入口函数 579
20.4  MFC规则DLL 580
20.4.1  静态链接MFC DLL的规则
DLL 580
20.4.2  共享MFC DLL的规则DLL 582
20.5  MFC扩展DLL 583
20.6  Windows钩子 586
20.6.1  认识HOOK钩子 586
20.6.2  钩子的安装与卸载 587
20.6.3  键盘钩子 588
第四篇  数据库访问
第21章  使用ODBC数据源 593
21.1  数据库访问技术 593
21.1.1  ODBC API 593
21.1.2  ODBC的MFC类 594
21.1.3  DAO与RDO 594
21.1.4  OLE DB与ADO 595
21.2  MFC ODBC类 596
21.2.1  CDatabase类 596
21.2.2  CRecordSet类 597
21.3  注册数据源和示例数据库 597
21.4  创建数据库应用程序 599
21.4.1  了解记录集 600
21.4.2  了解记录视图 603
21.4.3  创建视图对话框 605
21.4.4  对记录排序 606
21.5  多表操作 607
21.5.1  添加记录集 607
21.5.2  添加记录视图类 608
21.5.3  过滤数据 609
21.5.4  显示多个记录视图 610
21.6  更新操作 613
21.6.1  更新CRecordSet记录集 614
21.6.2  事务 615
21.7  向表添加数据 616
21.7.1  添加订单的逻辑处理 616
21.7.2  创建记录集视图 617
21.7.3  对话框切换 620
21.7.4  创建订单编号 621
21.7.5  订单数据 623
21.7.6  为订单选择产品 624
21.7.7  添加新订单 625
第22章  数据库和ADO-NET 628
22.1  ADO-NET概述 628
22.1.1  ADO-NET的设计目标 628
22.1.2  ADO-NET体系结构 629
22.1.3  System::Data命名空间 630
22.2  使用DataReader 632
22.3  使用DataSet 636
22.3.1  读取数据 636
22.3.2  修改数据 639
22.3.3  保存DataSet对数据的修改 643
22.4  在DataSet中访问多个表 645
22.4.1  ADO-NET中的关系 645
22.4.2  导航关系 645
22.5  使用数据控件 648
22.5.1  DataGridView控件 649
22.5.2  数据绑定 654