Visual C++ 2005入门经典--源代码及课后练习答案
文件大小: 446k
源码售价: 10 个金币 积分规则     积分充值
资源说明:CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《Visual C++ 2005入门经典》的源代码及课后练习答案 对应的书籍资料见: Visual C++ 2005入门经典 基本信息 原书名: Ivor Horton's Beginning Visual C++ 2005 原出版社: Wiley 作者: (美)Ivor Horton 译者: 李颂华 康会光 出版社:清华大学出版社 ISBN:9787302142713 上架时间:2007-2-12 出版日期:2007 年1月 开本:16开 页码:1046 版次:1-1 编辑推荐   本书由编程语言先驱者Ivor Horton倾力而著,是国内第一本全面、深入介绍Visual C++ 2005的经典之作! 内容简介   本书系编程语言先驱者Ivor Horton的经典之作,是学习C++编程最畅销的图书品种之一,不仅涵盖了Visual C++ .NET编程知识,还全面介绍了标准C++语言和.NET C++/CLI。本书延续了Ivor Horton讲解编程语言的独特方法,从中读者可以学习Visual C++ 2005的基础知识,并全面掌握在MFC和Windows Forms中访问数据源的技术。此外,本书各章后面的习题将有助于读者温故而知新,并尽快成为C++高效程序员。...    作译者   Ivor Horton是世界著名的计算机图书作家,主要从事与编程相关的顾问及撰写工作,曾帮助无数程序员步入编程的殿堂。他曾在IBM工作多年,能使用多种语言进行编程(在多种机器上使用汇编语言和高级语言),设计和实现了实时闭环工业控制系统。Horton拥有丰富的教学经验(教学内容包括C、C++、Fortran、PL/1、APL等),同时还是机械、加工和电子CAD系统、机械CAM系统和DNC/CNC系统方面的专家。Ivor Horton还著有Beginning Visual C++ 6、Beginning C Programming和Beginning Java 2等多部入门级好书。 目录 封面 -18 前言 -14 目录 -9 第1章 使用Visual C++ 2005编程 1 1.1 .NET Framework 1 1.2 CLR 2 1.3 编写C++应用程序 3 1.4 学习Windows编程 4 1.4.1 学习C++ 4 1.4.2 C++标准 5 1.4.3 控制台应用程序 5 1.4.4 Windows编程概念 6 1.5 集成开发环境简介 7 1.6 使用IDE 9 1.6.1 工具栏选项 9 1.6.2 可停靠的工具栏 10 1.6.3 文档 11 1.6.4 项目和解决方案 11 1.6.5 设置Visual C++ 2005的选项 23 1.6.6 创建和执行Windows应用程序 24 1.6.7 创建Windows Forms应用程序 26 1.7 小结 29 第2章 数据、变量和计算 31 2.1 C++程序结构 31 2.1.1 程序注释 36 2.1.2 #include指令——头文件 37 2.1.3 命名空间和using声明 37 2.1.4 main()函数 38 2.1.5 程序语句 38 2.1.6 空白 40 2.1.7 语句块 41 2.1.8 自动生成的控制台程序 41 2.2 定义变量 42 2.2.1 命名变量 43 2.2.2 C++中的关键字 43 2.2.3 声明变量 44 2.2.4 变量的初值 44 2.3 基本数据类型 45 2.3.1 整型变量 45 2.3.2 字符数据类型 46 2.3.3 整型修饰符 47 2.3.4 布尔类型 48 2.3.5 浮点类型 48 2.3.6 ISO/ANSI C++中的基本类型 49 2.3.7 字面值 50 2.3.8 定义数据类型的同义词 50 2.3.9 具有特定值集的变量 51 2.3.10 指定枚举常量的类型 52 2.4 基本的输入/输出操作 53 2.4.1 从键盘输入 53 2.4.2 到命令行的输出 53 2.4.3 格式化输出 54 2.4.4 转义序列 55 2.5 C++中的计算 57 2.5.1 赋值语句 57 2.5.2 算术运算 58 2.5.3 计算余数 63 2.5.4 修改变量 63 2.5.5 增量和减量运算符 64 2.5.6 计算的顺序 66 2.6 变量类型和类型强制转换 67 2.6.1 对操作数进行类型强制转换的规则 68 2.6.2 赋值语句中的类型强制转换 69 2.6.3 显式类型强制转换 69 2.6.4 老式的类型强制转换 70 2.6.5 按位运算符 71 2.7 了解存储时间和作用域 76 2.7.1 自动变量 77 2.7.2 决定变量声明的位置 79 2.7.3 全局变量 79 2.7.4 静态变量 82 2.8 命名空间 83 2.8.1 声明命名空间 84 2.8.2 多个命名空间 86 2.9 C++/CLI编程 87 2.9.1 C++/CLI特有的基本数据类型 87 2.9.2 命令行上的C++/CLI输出 91 2.9.3 C++/CLI特有的功能——格式化输出 92 2.9.4 C++/CLI的键盘输入 94 2.9.5 使用safe_cast 95 2.9.6 C++/CLI枚举 96 2.10 小结 98 2.11 练习题 100 第3章 判断和循环 101 3.1 比较数据值 101 3.1.1 if语句 102 3.1.2 嵌套的if语句 103 3.1.3 扩展的if语句 105 3.1.4 嵌套的if-else语句 107 3.1.5 逻辑运算符和表达式 109 3.1.6 条件运算符 112 3.1.7 switch语句 114 3.1.8 无条件转移 116 3.2 重复执行语句块 117 3.2.1 循环的概念 117 3.2.2 for循环的变体 120 3.2.3 while循环 127 3.2.4 do-while循环 129 3.2.5 嵌套的循环 130 3.3 C++/CLI编程 133 3.4 小结 139 3.5 练习 140 第4章 数组、字符串和指针 141 4.1 处理多个相同类型的数据值 141 4.1.1 数组 142 4.1.2 声明数组 142 4.1.3 初始化数组 145 4.1.4 字符数组和字符串处理 147 4.1.5 多维数组 150 4.2 间接数据存取 153 4.2.1 指针的概念 153 4.2.2 声明指针 154 4.2.3 使用指针 155 4.2.4 初始化指针 157 4.2.5 sizeof运算符 162 4.2.6 常量指针和指向常量的指针 164 4.2.7 指针和数组 165 4.3 动态内存分配 172 4.3.1 堆的别名——自由存储器 172 4.3.2 new和delete运算符 172 4.3.3 为数组动态分配内存 173 4.3.4 多维数组的动态分配 176 4.4 使用引用 177 4.4.1 引用的概念 177 4.4.2 声明并初始化引用 177 4.5 C++/CLI编程 178 4.5.1 跟踪句柄 178 4.5.2 CLR数组 180 4.5.3 字符串 195 4.5.4 跟踪引用 203 4.5.5 内部指针 204 4.6 小结 206 4.7 练习 207 第5章 程序结构(1) 209 5.1 理解函数 209 5.1.1 需要函数的原因 210 5.1.2 函数的结构 210 5.1.3 使用函数 212 5.2 给函数传递实参 216 5.2.1 按值传递机制 217 5.2.2 给函数传递指针实参 218 5.2.3 给函数传递数组 219 5.2.4 给函数传递引用实参 224 5.2.5 使用const修饰符 226 5.2.6 main()函数的实参 227 5.2.7 接受数量不定的函数实参 229 5.3 从函数返回值 231 5.3.1 返回指针 231 5.3.2 返回引用 234 5.3.3 函数中的静态变量 236 5.4 递归函数调用 239 5.5 C++/CLI编程 241 5.5.1 接受数量可变实参的函数 242 5.5.2 main( )的实参 243 5.6 小结 244 5.7 练习 245 第6章 程序结构(2) 246 6.1 函数指针 246 6.1.1 声明函数指针 247 6.1.2 函数指针作为实参 250 6.1.3 函数指针的数组 251 6.2 初始化函数形参 252 6.3 异常 253 6.3.1 抛出异常 255 6.3.2 捕获异常 256 6.3.3 MFC中的异常处理 257 6.4 处理内存分配错误 258 6.5 函数重载 259 6.5.1 函数重载的概念 260 6.5.2 何时重载函数 262 6.6 函数模板 262 6.7 使用函数的示例 265 6.7.1 实现计算器 265 6.7.2 从字符串中删除空格 268 6.7.3 计算表达式的值 268 6.7.4 获得项值 271 6.7.5 分析数 272 6.7.6 整合程序 274 6.7.7 扩展程序 276 6.7.8 提取子字符串 277 6.7.9 运行修改过的程序 280 6.8 C++/CLI编程 280 6.8.1 理解类函数 281 6.8.2 CLR版本的计算器程序 287 6.9 小结 293 6.10 练习 293 第7章 自定义数据类型 295 7.1 C++中的结构 295 7.1.1 结构的概念 296 7.1.2 定义结构 296 7.1.3 初始化结构 296 7.1.4 访问结构的成员 297 7.1.5 伴随结构的智能帮助 300 7.1.6 RECT结构 301 7.1.7 使用指针处理结构 302 7.2 数据类型、对象、类和实例 303 7.2.1 类的起源 305 7.2.2 类的操作 305 7.2.3 术语 306 7.3 理解类 306 7.3.1 定义类 307 7.3.2 声明类的对象 307 7.3.3 访问类的数据成员 308 7.3.4 类的成员函数 310 7.3.5 成员函数定义的位置 312 7.3.6 内联函数 312 7.4 类构造函数 313 7.4.1 构造函数的概念 313 7.4.2 默认的构造函数 315 7.4.3 在类定义中指定默认的形参值 318 7.4.4 在构造函数中使用初始化列表 320 7.5 类的私有成员 320 7.5.1 访问私有类成员 323 7.5.2 类的友元函数 324 7.5.3 默认复制构造函数 326 7.6 this指针 328 7.7 类的const对象 331 7.7.1 类的const成员函数 331 7.7.2 类外部的成员函数定义 332 7.8 类对象的数组 333 7.9 类的静态成员 335 7.9.1 类的静态数据成员 335 7.9.2 类的静态函数成员 338 7.10 类对象的指针和引用 338 7.10.1 类对象的指针 338 7.10.2 类对象的引用 341 7.11 C++/CLI编程 343 7.11.1 定义数值类类型 344 7.11.2 定义引用类类型 348 7.11.3 类属性 351 7.11.4 initonly字段 364 7.11.5 静态构造函数 366 7.12 小结 367 7.13 练习 367 第8章 深入理解类 369 8.1 类的析构函数 369 8.1.1 析构函数的概念 369 8.1.2 默认的析构函数 370 8.1.3 析构函数与动态内存分配 372 8.2 实现复制构造函数 375 8.3 在变量之间共享内存 377 8.3.1 定义联合 377 8.3.2 匿名联合 379 8.3.3 类和结构中的联合 379 8.4 运算符重载 379 8.4.1 实现重载的运算符 380 8.4.2 实现对运算符的完全支持 383 8.4.3 重载赋值运算符 387 8.4.4 重载加法运算符 392 8.4.5 重载递增和递减运算符 396 8.5 类模板 396 8.5.1 定义类模板 397 8.5.2 根据类模板创建对象 400 8.5.3 使用有多个形参的类模板 403 8.6 使用类 405 8.6.1 类接口的概念 405 8.6.2 定义问题 405 8.6.3 实现CBox类 406 8.6.4 定义CBox类 413 8.6.5 使用CBox类 423 8.7 组织程序代码 426 8.8 C++/CLI编程 428 8.8.1 在数值类中重载运算符 429 8.8.2 重载递增和递减运算符 434 8.8.3 在引用类中重载运算符 435 8.9 小结 437 8.10 练习 438 第9章 类继承和虚函数 440 9.1 面向对象编程的基本思想 440 9.2 类的继承 441 9.2.1 基类的概念 442 9.2.2 基类的派生类 442 9.3 继承机制下的访问控制 446 9.3.1 派生类中构造函数的操作 448 9.3.2 声明类的保护成员 452 9.3.3 继承类成员的访问级别 455 9.4 派生类中的复制构造函数 456 9.5 友元类成员 461 9.5.1 友元类 462 9.5.2 对类友元关系的限制 462 9.6 虚函数 462 9.6.1 虚函数的概念 465 9.6.2 使用指向类对象的指针 467 9.6.3 使用引用处理虚函数 469 9.6.4 纯虚函数 470 9.6.5 抽象类 471 9.6.6 间接基类 474 9.6.7 虚析构函数 476 9.7 类类型之间的强制转换 481 9.8 嵌套类 482 9.9 C++/CLI编程 485 9.9.1 C++/CLI类的继承 486 9.9.2 接口类 492 9.9.3 定义接口类 492 9.9.4 类和程序集 496 9.9.5 被指定为new的函数 501 9.9.6 委托和事件 502 9.9.7 引用类的析构函数和结束函数 514 9.9.8 通用类 516 9.10 小结 527 9.11 练习 528 第10章 调试技术 531 10.1 理解调试 531 10.1.1 程序故障 532 10.1.2 常见故障 533 10.2 基本的调试操作 534 10.2.1 设置断点 536 10.2.2 设置跟踪点 538 10.2.3 启动调试模式 538 10.2.4 修改变量的值 542 10.3 添加调试代码 542 10.3.1 使用断言 543 10.3.2 添加自己的调试代码 544 10.4 调试程序 549 10.4.1 调用堆栈 549 10.4.2 单步执行到出错位置 551 10.5 测试扩展的类 555 10.6 调试动态内存 558 10.6.1 检查自由存储器的函数 558 10.6.2 控制自由存储器的调试操作 559 10.6.3 自由存储器的调试输出 561 10.7 调试C++/CLI程序 566 10.8 小结 575 第11章 Windows编程的概念 576 11.1 Windows编程基础 576 11.1.1 窗口的元素 577 11.1.2 Windows程序与操作系统 579 11.1.3 事件驱动型程序 579 11.1.4 Windows消息 579 11.1.5 Windows API 580 11.1.6 Windows数据类型 580 11.1.7 Windows程序中的符号 581 11.2 Windows程序的结构 582 11.2.1 WinMain()函数 583 11.2.2 消息处理函数 594 11.2.3 简单的Windows程序 598 11.3 Windows程序的组织 600 11.4 MFC 601 11.4.1 MFC标记法 601 11.4.2 MFC程序的组织方式 602 11.5 使用Windows Forms 606 11.6 小结 608 第12章 使用MFC编写Windows程序 609 12.1 MFC的文档/视图概念 609 12.1.1 文档的概念 609 12.1.2 文档界面 610 12.1.3 视图的概念 610 12.1.4 连接文档和视图 611 12.1.5 应用程序和MFC 612 12.2 创建MFC应用程序 613 12.2.1 创建SDI应用程序 615 12.2.2 MFC Application wizard的输出 618 12.2.3 创建MDI应用程序 628 12.3 小结 630 12.4 练习 631 第13章 处理菜单和工具栏 632 13.1 与Windows进行通信 632 13.1.1 了解消息映射 633 13.1.2 消息类别 635 13.1.3 处理程序中的消息 636 13.2 扩充Sketcher程序 637 13.3 菜单的元素 638 13.4 为菜单消息添加处理程序 642 13.4.1 选择处理菜单消息的类 643 13.4.2 创建菜单消息函数 643 13.4.3 编写菜单消息函数的代码 646 13.4.4 添加更新用户界面的消息处理程序 650 13.5 添加工具栏按钮 653 13.5.1 编辑工具栏按钮的属性 654 13.5.2 练习使用工具栏按钮 655 13.5.3 添加工具提示 656 13.6 小结 656 13.7 练习题 657 第14章 在窗口中绘图 658 14.1 窗口绘图的基础知识 658 14.1.1 窗口客户区 659 14.1.2 Windows图形设备界面 659 14.2 Visual C++中的绘图机制 662 14.2.1 应用程序中的视图类 662 14.2.2 CDC类 663 14.3 实际绘制图形 671 14.4 对鼠标进行编程 673 14.4.1 鼠标发出的消息 673 14.4.2 鼠标消息处理程序 675 14.4.3 使用鼠标绘图 677 14.5 练习使用Sketcher程序 700 14.5.1 运行这个示例 700 14.5.2 捕获鼠标消息 701 14.6 小结 703 14.7 练习题 703 第15章 创建文档和改进视图 705 15.1 什么是集合类 705 15.1.1 集合的类型 705 15.1.2 类型安全的集合类 706 15.1.3 对象集合 706 15.1.4 类型化指针集合 715 15.2 使用CList模板类 717 15.2.1 绘制曲线 718 15.2.2 定义CCurve类 719 15.2.3 实现CCurve类 720 15.2.4 练习使用CCurve类 722 15.3 创建文档 723 15.4 改进视图 728 15.4.1 更新多个视图 728 15.4.2 滚动视图 730 15.4.3 使用MM_LOENGLISH映射模式 734 15.5 删除和移动形状 735 15.6 实现上下文菜单 736 15.6.1 关联菜单和类 737 15.6.2 选择上下文菜单 739 15.6.3 醒目显示元素 744 15.6.4 处理菜单消息 749 15.7 处理被屏蔽的元素 756 15.8 小结 757 15.9 练习 758 第16章 使用对话框和控件 759 16.1 理解对话框 759 16.2 理解控件 760 16.3 创建对话框资源 761 16.4 对话框的编程 764 16.4.1 添加对话框类 764 16.4.2 模态和非模态对话框 765 16.4.3 显示对话框 765 16.5 支持对话框控件 768 16.5.1 初始化控件 769 16.5.2 处理单选按钮消息 770 16.6 完成对话框的操作 771 16.6.1 给文档类添加存储线宽的成员 772 16.6.2 给元素添加线宽 772 16.6.3 在视图中创建元素 773 16.6.4 练习使用对话框 774 16.7 使用微调按钮控件 775 16.7.1 添加Scale菜单项和工具栏按钮 775 16.7.2 创建微调按钮 776 16.7.3 生成比例对话框类 777 16.7.4 显示微调按钮 780 16.8 使用比例系数 781 16.8.1 可缩放的映射模式 781 16.8.2 设置文档的大小 783 16.8.3 设置映射模式 783 16.8.4 同时实现滚动与缩放 785 16.9 使用状态栏 787 16.10 使用列表框 791 16.10.1 删除比例对话框 791 16.10.2 创建列表框控件 792 16.11 使用编辑框控件 795 16.11.1 创建编辑框资源 795 16.11.2 创建对话框类 796 16.11.3 添加Text菜单项 798 16.11.4 定义文本元素 799 16.11.5 实现CText类 800 16.11.6 创建文本元素 801 16.12 小结 803 16.13 练习 804 第17章 存储和打印文档 805 17.1 了解串行化 805 17.2 串行化文档 806 17.2.1 文档类定义中的串行化 806 17.2.2 文档类实现中的串行化 807 17.2.3 基于CObject的类的功能 809 17.2.4 串行化的工作方式 810 17.2.5 如何实现类的串行化 811 17.3 应用串行化 812 17.3.1 记录文档修改 812 17.3.2 串行化文档 813 17.3.3 串行化元素类 814 17.4 练习串行化 818 17.5 移动文本 819 17.6 打印文档 821 17.7 实现多页打印 824 17.7.1 获取文档的总尺寸 825 17.7.2 存储打印数据 825 17.7.3 准备打印 826 17.7.4 打印后的清除 828 17.7.5 准备设备上下文 828 17.7.6 打印文档 829 17.7.7 获得文档的打印输出 833 17.8 小结 833 17.9 练习题 834 第18章 编写自己的DLL 835 18.1 了解DLL 835 18.1.1 DLL的工作方式 836 18.1.2 DLL的内容 838 18.1.3 DLL变体 839 18.2 决定放入DLL的内容 840 18.3 编写DLL 841 18.3.1 编写和使用扩展DLL 841 18.3.2 从DLL中导出变量和函数 848 18.3.3 将符号导入程序 849 18.3.4 实现符号从DLL的导出 849 18.4 小结 852 18.5 练习题 852 第19章 连接到数据源 853 19.1 数据库基础知识 853 19.2 SQL 855 19.2.1 使用SQL检索数据 856 19.2.2 使用SQL连接表 857 19.2.3 对记录进行排序 859 19.3 MFC中的数据库支持 859 19.4 创建数据库应用程序 861 19.4.1 注册ODBC数据库 861 19.4.2 生成MFC ODBC程序 862 19.4.3 了解程序结构 865 19.4.4 示例练习 875 19.5 对记录集进行排序 876 19.6 使用另一个记录集对象 877 19.6.1 添加记录集类 878 19.6.2 添加记录集的视图类 880 19.6.3 定制记录集 884 19.6.4 访问多个表视图 887 19.6.5 查看产品的订单 892 19.7 查看客户的详细情况 893 19.7.1 添加客户记录集 893 19.7.2 创建客户对话框资源 894 19.7.3 创建客户视图类 894 19.7.4 添加过滤器 896 19.7.5 实现过滤器参数 898 19.7.6 链接订单对话框和客户对话框 899 19.7.7 练习使用数据库查看器 902 19.8 小结 902 19.9 练习题 902 第20章 更新数据源 904 20.1 更新操作 904 20.1.1 CRecordset更新操作 905 20.1.2 事务 907 20.2 简单的更新示例 908 20.3 管理更新过程 911 20.4 向表中添加行 922 20.4.1 订单录入过程 922 20.4.2 创建资源 923 20.4.3 创建记录集 924 20.4.4 创建记录集视图 924 20.4.5 给对话框资源添加控件 929 20.4.6 实现对话框切换 932 20.4.7 创建订单ID 936 20.4.8 存储订单数据 941 20.4.9 为订单选择产品 943 20.4.10 添加新订单 945 20.5 小结 950 20.6 练习 950 第21章 使用Windows Forms的应用程序 952 21.1 理解Windows Forms 952 21.2 理解Windows Forms应用程序 953 21.2.1 修改窗体的属性 954 21.2.2 如何启动应用程序 955 21.3 定制应用程序GUI 956 21.3.1 给窗体添加控件 957 21.3.2 添加选项卡控件 960 21.3.3 使用GroupBox控件 962 21.3.4 使用Button控件 964 21.3.5 使用WebBrowser控件 965 21.3.6 Winning应用程序的操作 967 21.3.7 添加上下文菜单 967 21.3.8 创建事件处理程序 967 21.3.9 处理Limits菜单的事件 974 21.3.10 创建对话框 974 21.3.11 使用对话框 979 21.3.12 添加第二个对话框 985 21.3.13 实现Help | About菜单项 992 21.3.14 处理按钮单击事件 993 21.3.15 响应上下文菜单 996 21.4 小结 1002 21.5 练习 1003 第22章 在Windows Forms应用程序中访问数据源 1004 22.1 使用数据源 1004 22.2 访问并显示数据 1005 22.3 使用DataGridView控件 1006 22.4 在无约束模式中使用DataGridView控件 1007 22.5 定制DataGridView控件 1012 22.5.1 定制题头单元格 1014 22.5.2 定制非题头单元格 1014 22.5.3 动态设置单元格样式 1020 22.6 使用约束模式 1026 22.7 BindingSource组件 1027 22.8 使用BindingNavigator控件 1031 22.9 绑定到单独的控件 1033 22.10 使用多个表 1037 22.11 小结 1038 22.12 练习 1039 附录A C++关键字 1040 A.1 ISO/ANSI C++关键字 1040 A.2 C++/CLI关键字 1041 附录B ASCII码 1042 前言   欢迎使用本书。通过使用本书,您可成为优秀的C++程序员。Microsoft公司的最新开发系统Visual Studio 2005支持两种截然不同但又紧密相关的C++语言。该系统完全支持原来的ISO/ANSI标准C++,同时还支持名为C++/CLI的新版C++。C++/CLI由Microsoft公司开发,现在是ECMA标准。这两种C++版本互为补充,各自完成不同的任务。ISO/ANSI C++用于开发在本地计算机上运行的高性能应用程序,而C++/CLI专门为.NET Framework开发。本书将讲述使用这两种C++版本开发应用程序的基础知识。.   当编写ISO/ANSI C++程序时,我们可以从自动生成的代码中获得大量帮助,但仍然需要亲自编写大量C++代码。我们不仅需要对面向对象的编程技术有扎实的理解,而且需要充分了解Windows编程所涉及的方方面面。C++/CLI虽然针对.NET Framework开发,但同时也是Windows Forms应用程序开发的载体。开发Windows Forms程序经常只需要编写很少的代码,有时甚至不用编写代码。当然,当必须给Windows Forms应用程序添加代码时,即使这部分代码只占到代码总量的很小比例,也仍然要求我们有较多的C++/CLI语言的知识。   ISO/ANSI C++仍然是许多专业人员选用的语言,但C++/CLI和Windows Forms应用程序带来的开发速度使得C++/CLI也成了基本的语言。因此,笔者决定在本书中包括这两种C++语言的基本内容。   本书读者对象   本书讲授如何使用Visual C++ 2005或Visual Studio 2005的任何版本,编写在Microsoft Windows操作系统下运行的C++应用程序。阅读本书不需要预先具备任何特定编程语言的知识。如果属于下列3种情形之一,那么您就适于学习本教程:   ●具备少量其他语言的编程经验,比如BASIC或Pascal;渴望学习C++,并想提升实际的Microsoft Windows编程技能。   ●有一些使用C或C++语言的经验,但使用环境不是Microsoft Windows;希望使用最新的工具和技术,扩充在Windows环境下编程的技能。   ●属于编程新手,十分渴望投入编程世界,并最终掌握C++。要取得成功,您至少需要对计算机的工作原理有透彻的理解——包括内存的组织方式以及数据和指令的存储方式。   本书主要内容   本书使用Visual C++ 2005支持的两种技术,讲授C++编程的基础知识。详细介绍了两种风格的C++语言,使用Microsoft基本类(Microsoft Foundation Classes,MFC)开发本地的ISO/ANSI C++ Windows应用程序,使用Windows Forms开发C++/CLI Windows应用程序等知识。由于数据库技术在今天的重要性和普遍性,本书还介绍了可用于在MFC和 Windows Forms应用程序中访问数据源的技术。与Windows Forms应用程序相比,MFC应用程序相对来说属于编码密集型程序,原因是前者的创建过程使用了Visual C++ 2005中的高级设计功能,可以以图形方式组装应用程序的整个图形用户界面(GUI),并使所有代码自动生成。因此,本书把较多的篇幅给予了MFC编程,而非Windows Forms编程。   本书结构   本书内容的结构安排如下:   ●第1章介绍使用C++编写本地应用程序和.NET Framework应用程序而需要理解的基本概念,以及在Visual C++ 2005开发环境中体现的主要思想。还叙述了如何使用Visual C++ 2005的功能,来创建本书其余部分要学习的各种C++应用程序。   ●第2~10章专门讲授两种C++语言版本,还讲述了调试过程中涉及的基本概念和技术。第2~10章的内容的组织方式都相似:各章的前半部分讨论ISO/ANSI C++主题,后半部分讨论C++/CLI主题。   ●第11章讨论Microsoft Windows应用程序的组织方式,并描述和展示了在所有Windows应用程序中都存在的基本元素。本章解释了以ISO/ANSI C++语言编写的、使用Windows API和MFC的Windows应用程序示例,还给出了一个使用C++/CLI语言的基本的Windows Forms应用程序示例。   ●第12~17章详细描述了MFC提供的构建GUI的功能。我们将学习如何创建并使用通用控件来构建应用程序的图形用户界面,还将学习如何处理因用户与程序的交互作用而产生的事件。在此过程中,我们将创建一个具有相当规模的应用程序。除了学习构建GUI的技术以外,我们还将从开发该应用程序的过程中学到如何使用MFC来打印文档,以及如何在磁盘上保存文档。   ●第18章讲述为使用MFC创建自己的库而需要知道的基本知识。我们将了解可以创建的不同种类的库,还将开发能够与前6章逐渐开发的应用程序协同工作的示例。   ●第19、20两章讲述如何在MFC应用程序中访问数据源。我们首先了解到在只读模式中访问数据库的经验,然后再学习使用MFC更新数据库的基本编程技术。这两章的示例使用了可以从Web上下载的Northwind数据库,但我们也可以把这两章描述的技术应用于自己的数据源。   ●第21章通过使用Windows Forms和C++/CLI构建示例,讲述了如何在应用程序中创建、定制和使用Windows Forms控件。通过在本章从头至尾逐渐构建出一个完整的应用程序,我们将获得一定的实践经验。   ●第22章以第21章获得的知识为基础,演示了可用来访问数据源的控件的工作原理,并讲述了定制这些控件的方法。我们还将学习如何在不编写任何代码的情况下,创建能够访问数据库的应用程序。 .  本书各章内容都包括许多示范所讨论的编程技术的示例。每章结束时的“小结”部分总结了该章所讲述的要点,大多数章都在最后给出了一组练习题,您可以应用所学的技术来试着解答这些练习题。练习题的答案连同书中的所有代码都可以从Web站点上下载(参见后面的“源代码”部分了解详细情况)。   关于C++语言教程使用的示例都是使用简单的命令行输入和输出的控制台程序。这种方法使我们能够在不陷入复杂的Windows GUI编程的情况下,学习C++的各种功能。实际上,我们只有在对编程语言有了透彻理解之后,才能进行Windows 编程。   如果希望使学习过程尽可能简单,您最初可以只学习ISO/ANSI C++编程。讲授C++语言的各章(第2~10章)都是首先讨论特定方面的ISO/ANSI C++功能,然后再讨论C++/CLI在相同的上下文中引入的新功能。以这种方式组织各章内容的原因在于,C++/CLI是作为ISO/ANSI标准语言的扩充定义的,因此对C++/CLI的理解是以对ISO/ANSI C++的理解为基础的。因此,您可以只阅读第2~10章中的ISO/ANSI主题,而忽略跟在后面的C++/CLI部分。然后可以继续学习使用ISO/ANSI C++的Windows应用程序开发部分,而免去记住两种语言版本的苦恼。在熟悉了ISO/ANSI C++之后,您可以回头重新学习C++/CLI。当然,您也可以逐章进行学习,从而同步增加这两种C++语言版本的知识。   使用本书的前提..   为了使用本书,您需要拥有Visual Studio 2005 Standard Edition、Visual Studio 2005 Professional Edition或者Visual Studio 2005 Team System。注意,Visual C++ Express 2005因不包括MFC而不能胜任。Visual Studio 2005要求操作系统是Windows XP Service Pack 2或Windows 2000 Service Pack 4。为了安装上述3种Visual Studio 2005版本,您的计算机需要有1 GHz的处理器,至少要有256MB的内存,系统驱动器上至少需要有1GB的可用空间,在安装驱动器上至少要有2GB的可用空间。为了安装随产品提供的完整MSDN文档,您在安装驱动器上需要有额外的1.8GB可用空间。   书中的数据库示例使用了Northwind Traders数据库。通过在http://msdn.microsoft.com上搜索“Northwind Traders”,可以找到该数据库的下载链接。当然,您可以把相应的示例改编成使用其他数据库。   最为重要的是,为了使本书发挥最大功效,您需要有学习的愿望和掌握目前最强大的Windows编程工具的决心,需要有输入和完成所有示例、以及完成书中所有练习题的献身精神。这些要求听起来比较难,而实际上不然,您会惊讶于自己在相对较短的时间内就能达到的成就。记住,每一个学习编程的人都会不时陷入困境,但只要坚持不懈,错综复杂的问题必将变得越来越清晰,而您最终必将走出困境。本书将帮助您开始独立的实践,并由此成为成功的C++程序员。   源代码   在您登录到Wrox站点http://www.wrox.com/时,只需使用Search工具或使用书名列表就可以找到本书。接着在Code栏中单击Download链接,或单击本书信息页面上的Download Code链接,就可以获得本书所有的源代码。另外,您也可以从本书的合作站点www.tupwk.com. cn/downpage上下载本书的所有源代码。   从以上站点上下载的文件使用WinZip进行了压缩。在把文件保存到硬盘的一个文件夹中时,需要使用解压缩软件(如WinZip或PKUnzip)对该文件解压缩。在解压缩时,代码常常放在各自的章节文件夹中。在开始解压缩过程时,一定要将解压缩软件WinZip或PKUnzip设置为使用文件夹名。   勘误表   尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的,如果您在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫,当然,这还有助于提供更高质量的信息。请给fwkbook@tup.tsinghua.edu.cn发电子邮件,我们就会检查您的信息,如果是正确的,就把它发送到该书的勘误表页面上,或在本书的后续版本中采用。   要在网站上找到勘误表,可以登录http://www.wrox.com,通过Advanced Search工具或书名列表查找本书,然后在本书的信息页面上,单击Book Errata链接。   E-Mail支持   如果您希望直接就本书的问题向对本书知之甚多的专家咨询,那么,就向support@wrox. com发电子邮件,在电子邮件的“主题”(Subject)栏中,加上本书的名称和ISBN的最后4位号码。典型的电子邮件应该包括下列内容:   ●在“主题”栏加上英文书的书名、ISBN的最后4位数字(1974)和问题所在的页码。   ●在邮件的正文中加上您的姓名、联系信息和问题。   我们不会发给您垃圾邮件。我们只需要详细的情况以节省您的宝贵时间和我们的时间。当您发送电子邮件时,它会直接链接到以下支持链:   ●客户支持——您的消息会传送到我们的客户支持人员,他们是阅读信息的第一人。他们有常见问题的文件,会迅速回答一般性的问题。他们回答关于本书和网站的一般性问题。   ●编辑支持——更深的问题会转发到负责本书的技术编辑处。他(或)她具有编程或特殊产品的经验,能够回答某个主题的详细技术问题。   ●作者支持——最后,在编辑都不能回答问题的情况下(这种情况很少出现),这些问题将转发到作者。我们试图保护作者不要从写作中分心,但是,我们也很愿意将特殊的问题转发给他们。所有的Wrox作者帮助支持他们的书籍。他们向客户和编辑回复电子邮件,所有的读者都会从中受益。   Wrox支持过程只能提供直接与已出版的图书相关的问题。对于超出此范围的问题可以通过http://p2p.wrox.com/论坛的团体列表来提供支持。   p2p.wrox.com   P2P邮件列表是为作者和同行的讨论而设立的。我们在邮件列表、论坛和新闻组中提供“程序员到程序员的支持”(programmer to programmer support),还包括一对一的电子邮件支持系统。如果把问题发送给P2P,就可以相信,您的问题不仅仅是由支持专家解答,而且还要提供给我们邮件列表中的许多Wrox作者和其他业界专家。在p2p.wrox.com上,可以从许多不同的列表中获得帮助,不仅在阅读本书时获得帮助,还可以在开发应用程序时获得帮助。在网站的.NET类别中,最适合本书的是beginning_vb和vb_dotnet列表。   要订阅一个邮件列表,可以遵循下面的步骤:   (1) 进入http://p2p.wrox.com。   (2) 从左侧的菜单栏中选择合适的列表。   (3) 单击想加入的邮件列表。   (4) 按照指示订阅和填写电子邮件地址和密码。   (5) 回复接收到的确认电子邮件。   (6) 使用订阅管理器加入更多的列表,设置自己的邮件设置。   为什么这个系统提供最好的支持   您可加入该邮件列表中,也可以每周分类接收它们。如果您没有时间或设备接收该邮件列表,可以搜索我们的在线文档。垃圾邮件和广告邮件会被删除,您自己的电子邮件地址会被独特的Lyris系统保护起来。任何加入或退出列表的查询,或者与列表相关的一般问题,都应发送到listsupport@p2p.wrox.com。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。