资 源 简 介
VC++ 深入详解,学习VC++的经典教材,VC+是在 Windows平台下构建32位应用程序的强大而又复杂的开发工具,是目前世界上使用最多的开发工具之一。ⅤC++的应用非常广泛,从桌面应用程序到服务器端软件,从系统软件到应用软件,从单机程序到分布式应用程序,从图形图像处理到游戏的开发VC++无所不在。有一句关于VC++的话流传甚广,说“偷懒的人学ⅴB,聪明的人学Delphi,真正的程序员学C”,其一方面说明了VC应用的广泛,另一方面也说明了学习VC是有一定难度的。2004年,作者推出了一套讲述VC++60编程的教学视频,得到了广大学员的热烈反响,许多学员通过这套视频走上了VC++开发之路。有不少学员来信希望我能够将视频中的内容著书出版,让更多的人受益,然而由于自身琐事较多,一直未能如愿。后来在博文视点公司郭立总编的介绍下,有幸结识了余安萍,并由她执笔将视频中的内容整理出书。正是由于余安萍和郭立女士所付出的劳动,才有了本书的出版,在此向她们表示衷心的感谢。本书读者本书读者群包括:■掌握了C语言,想进一步学习 Windows编程的读者。■学习VC艹多年,但始终没有真正入门的读者■正在从事VC++开发的初级程序员。■有一定VC艹开发经验,想要系统地学习VC++的读者在本书的配套光盘中,提供了一套完整的VC+教学视频,以帮助读者更快、更好地掌握VC艹+编程。关于本书配套光盘的内容,请参见“本书的配套光盘说明”。本书的内容组织本书在内容的纠织上循序渐进、由浅入深;在知识的介绍上,从内到外、从原理到实践第1章助读者掌握 windows平台下程序运行的内部机制。第2章帮助读者复丬C+屮的重要知识,为后续知识的学习打下良好的基础。第3章重点剖析MFC框架程序的运行脉络,并与第1章的知识做对照,为读者彻底扫清学丬MFC的迷雾。相信通过这章的学习,很多以前学过MFC的读者都会有一种恍然大悟的感觉。前三章可以归为基础部分,从第4章开始就是实际应用开发的讲解了,包括绘图、文本、菜单、对话框、定制程序外观、图形保存和重绘、文件和注册表操作、网络编程、多线程、进程间通信、 Activeⅹ控件、动态链接库、HOOK编程等多个主题,并且每一章都有一个完整的例子。本书的讲解理论结合实际,选用的例子和代码具有相当的代表性和实用价值,我和我的学员曾经在实际开发项目的过程中就直接使用过很多书中的代码。本书的实例程序作者在编写本书时,使用的操作系统是 Windows2000 Service pack4,开发工具是VC++6.0SP5,MSDN是2001年1月版的(提示:与VC++60匹配的MSDN截止到2001年10月版,之后的版本都与NET匹配,可能与本书使川的版本有所不同)本书所有的实例程序都在上述环境中运行止常提示:由于QQ运行时占用了多个端口,可能与本书例子中的网络程序使用的端口冲突,在运行本书例子中的网络程序时,如果出错,请更换程序中的端口号,或者关闭QQ后再运行程序学习建议配套光盘提供的视频课数与本书的章数是一一对应的,建议读者先看视频,有一个初步印象后冉看相应的章节,这样能够更快、更好地掌握ⅴC++编程。在学习本书时,建议读者多动脑(想想为什么),多动手(将知识转换为自己的)。在理解的前提下,独立地编写出书中每章的例子程序,可以作为是否掌握本章内容的一个考核。由于作者的水平有限,错误和硫漏之处在所难免,欢迎广大技术专家和读者指正。作者的联系方式是cunxin@Sina.com,读者也可以上作者的网站发表意见,网址是http://www.sunxin.org/作者2006年4月Iy本书的配套光盘说明本书的配套光盘提供了两个部分的内容:本书所有实例的代码,VC++教学视频(Fash格式)。实例代码配套光盘中的实例代码是按照章节的顺序提供的,例如,第7章的例子程序位于光盘的 Chapter7日承下C++教学视频本套教学视频由作者本人录制,为了帮助读者更好地掌握VC艹+开发,作者花费了大量的时间和精力将AVI格式的视频转换为Hash格式,免费提供给读者使用,希望读者能够从中受益。这套视频的内容简介如下所示。Lesson1; Windows程序运行原理及程序编写流程,窗口产生过程,句柄原理,消息队列,回调函数,窗口关闭与应用程序退出的工作关系,使用VC++的若干小技巧, stdcall与 cdecl调用规范的比较,初学者常犯错误及注意事项。Leom2:C++经典语法与应用,类的编写与应用,构造与析构函数,函数的重载,类的继承,函数覆盖,基类与派生类的构造函数、析构函数调用顺序,如何在派生类构造函数中向基类的构造函数传递参数,this成员变量,类型转换的内幕,虚拟函数与多态性,引用和指针变量的区别与共同处。ⅤC工程的编译原理与过程,将工程中不同的类拆分到不同的文件中,每个类由一个h和cp文件共同完成,头文件重复定义问题的解决,培养了学员良好的编程习惯,也为以后分析 MFC App Wizard生成的工程奠定良好基础。Lesson3:讲述 MFC App Wizard的原理与MFC程序框架的剖析。 App wizard是个源代码生成具,是计算机辅助程序设计⊥具, Winmain在MFC程序中是如何从源程序中被总藏的, theApp全局变量是如何被分配的,MFC框架中的几个类的作用与相互关系,MFC框架窗口是如何产生和销毁的,对窗口类的 Pre create widow和 On create两个函数的着重分析, Windows窗口与C++中的CWnd类的关系Lesson4:MFC消息映射机制的剖析,讲述如何运用 Class wizard,理解发送给窗口的消息是如何被MFC框架通过窗口句柄映射表和消息映射表来用窗口类的函数进行响应的。掌握设备描述表及其封装类CDC的使用,CDC是如何与具体的设备发生关联的,融合具体的画图程序进行分析。如何设置封闭图形的填充刷子(位图画刷与透明画刷的使用)Lessons:掌握CDC的文字处理程序的编写,如何产生自定义字体和自定义插入符,熟悉对 CString类的使用。通过对卡拉OK程序的编写,讲解定时器的使用和 Draw Text函数的巧妙运用,讲解如何使用CDC的裁减功能Lesson6:菜单的工作原理及编写应用,菜单命令消息在MFC框架程序的几个类中的传递顺序和处理过程。标记菜单、默认菜单的实现原理、图形菜单的实现及常犯错误的分析, GetSystemMetrics的应用,弹出快捷菜单的实现方式及其命令响应函数有效范围(与弹出菜单时所指定的父窗口有密切的关系,最底层的子窗口具有最优先的处理机会)。动态菜单的编写,如何让程序在运行时产生新的菜单项及如何手工为这些新产生的菜单命令安排处理函数,如何在顶层窗口中截获对菜单命令的处理,更进一步掌握 CString类的应用LEsson7:对话框用户界面程序的编写,如何向对话框控件关联数据成员及其实现机理,如何利用对话框类的成员函数向控件发送消息和获取对话框控件的类指针,如何直接利用对话框控件类操纵对话框控件(发送消息和直接调用成员函数),如何在程序运行时生和销毀控件。对话框控件的几种操作方式的优劣比较分析。如何实现对话框的部分收缩和展开。如何让对话框上的文本框在程序启动后立即获得焦点,如何利用SetWindow long改变窗口的回调函数,通过改变文本框的默认回车处理方式进行演示。实现多个输入文本框间通过回车逐一向下传递焦点的另一种巧妙方法(用默认按钮来处理)。Lesson8:逃跑按钮的巧妙实现。如何制作属性页对话框和向导对话框,融合讲解组合框(如何调整组合框的大小)、列表框、单选按钮、复选按钮等常用对话框控件的多种使用方法。如何限制用户在不满足设定的条件时切换到其他属性贞和向导页。eson9:如何修改 MFC AppWizard向导生成的框架程序的外观和大小,修改图标、光标、背景的三种方法。如何增加和删除工具栏按钮,如何给应用程序增加工具栏,如何显示和隐藏工具栏。定制状态栏,在状态栏中添加时钟显示,CTme类及其用法。在状态栏中添加进度条(主窗口产生后立即产生进度条的巧妙思想,不能在 On create函数中直接处理,要用到自定义消息的方法)。鼠标坐标显示,在 CView中获取状态栏对象的几种方式。如何为应用程序添加启动画面。Lesson10:图形的绘制,如何使用自定义画笔(颜色,线宽,线型)。如何为程序中添加选项菜单和选项设置对话框,如何使用标准颜色对话框,如何使用字体对话框,在选项对话框中实现预览功能。实现选项对话框和窗口类中的数据交换。如何改变对话框和控件的背景色,如何改变控件的文本颜色,对按钮控件的特殊处理。如何在窗口中显示一幅位图。Ieso:如何让CDC上输出的文字、图形具有保持功能,集合类 CPtrArray的使用,CPaintDc与 CClientDc的区别与应用, OnPaint与 OnDraw在CⅤew中的关系及实现内幕,滚动窗口的实现,坐标空间、映射方式、设备坐标与逻辑坐标的转换。元文件设备描述表的使用,如何利用兼容DC实现图形的保存和再现Lesson12: const char*与char* const的区别。C语言对文件读写的支持,FLE指针文本文件和二进制文件的区别。用文本方式读写文件和以二进制方式读写文件的注意事项。C++对文件读写的支持, ofstream和 ifstrea的用法。Win32SDK对文件读写的支持,Create file函数、 Write File函数、 Read file函数的使用;MFC对文件读写的支持,CFe类和 CFlleDialog的使用,文件过滤器的设置。 Win. ini文件和注册表的读写方式及相关知识点Lesson13:使用 CArchive类对文件进行操作。MFC框架程序提供的文件新建与打开功能内部的实现机制。如何利用 CDocument类的串行化存储功能保存与加载数据。如何实现类对串行化的支持, CObArray的串行化实现内幕。删除文档数据时常犯的错误。MFC框架程序的文档类和视类的关系,以及如何获得相互的指针引用Lesson14:网络的相关知识,网络程序的编写, Socket是连接应用程序与网络驱动程序的桥梁, Socket在应用程序中创建,通过bnd与驱动程序建立关系。此后,应用程序送给 Socket的数据,出 Socket交给驱动程序向网络上发送出去。计算机从网络上收到与该Socket绑定的IP+Pot相关的数据后,由驱动程序交给 Socket,应用程序便可从该 Socket中提取接收到的数据。网络应用程序就是这样通过 Socket进行数据的发送与接收的。TCP与UDP的工作原理与编写过程,如何在程序中链接库文件,一个字符界面的聊天程序。Lesson15:多线程程序的编写,多线程应用中容易出现的问题。互斥对象的讲解,如何使用互斥对象来实现多线程的同步。如何利用命名互斥对象保证应用程序只有一个实例运行。应用多线程编写网络聊天室程序eson16:事件内核对象、关键代码段(临界区)的讲解,以及在多线程同步中的应用。在 Windows下编写基于消息的网络应用程序,掌握阻塞与非阻塞网络程序的编写,理解在 windows平台下,采用异步选择机制可以提高网络应用程序的性能。LLesson17:详细讲解进程间通信的四种方式:剪贴板、匿名管道、命名管道和邮槽,并比较分析这几种进程间通信的优点和缺点。Lesson8: Activeⅹ控件的应用与L作原理。 Active控件的编写,如何为控件安排属性、方法、事件、属性页、持久性存储,控件如何通知容器自身属性的改变。如何注册控件与取消控件注册,在ⅴB和ⅤC中访问 ActiveX控件。Lesson19:动态链接库程序的编写。静态库与动态库的区别,以及调用程序在链接静态库和动态库时的区别。如何利用工具查看动态链接库输出的函数, Depends工具的使用,C++编译器名字改编技术对动态链接库输出函数的影响, extem“C”的用法,利用模块定义文件来解决C+名字改编的问题。用 typedef定义指向函数的指针类型,如何获得动态连接库里的函数的指针。Lessoni20:Hook编程。如何安装钩子过程,如何编写全局钩了。动态连接库里的全局变量数据共享问题分析。ADO数据库编程。在ⅤB中利用ADO控件和ADO对象访问数据库,在VC中利用ADO技术访问数据库。·VII·日录第1章 Windows程序内部运行机制…1227虚函数与多态性11API与SDK…纯虚函数…………12窗口与句柄228函数的覆盖和隐藏1.3消息与消息队列……14 WinMain函数……2345229引用…………2.2.10C++类的设计习惯及头文件重复包含问题的解决…………5714.1 winMain函数的定义22.1VC+程序编译链接的142窗口的创建………原理与过程…………14.3消息循环……44编写窗口过程函数…………15第3章MFC框架程序剖析15动手写第一个 Windows程序…193.1 MFC App Wizard1.6消息循环的错误分析…2332基于MFC的程序框架剖析…6617变量的命名约定……32MFC程序中的18小结……26Winmain函数……67第2章掌握G++27322MFC框架窗783.2.3消息循环21从结构到类………273.24窗口过程函数…………8621.1结构体的定义…………27325文档/视类结构872.12结构体与类…………………29326帮助对话框类22C++的特性3033窗口类、窗口类对象与窗口…88221类与对象……………3433.1三者之间关系88222构造函数……………………………34332在窗口中显示按钮…………92223.析构函数3734木章小结224函数的重载37225this指针第4章简单绘图39226类的继承…………4141MFC消息映射机制…100IX4,1.1 Class wizard………l0l622 Windows消息的分类………1664.12消息映射机制623菜单命令的路由16642绘制线条l126.3基本菜单操作………1694.2.1利用SDK全局函数实现63.1标记菜单169画线功能114632默认菜单项………172422利用MFC的CDC类实现633图形标记菜单…174画线功能115634禁用菜单项177423利用MFC的 CClientDC类635移除和装载菜单……………18实现画线功能……11663.6MFC菜单命令更新机制……183424利用MFC的 WIndow Do类637快捷菜单………………………187实现画线功能…11764动态菜单操作19342.5在桌面窗口中画线………………118641添加菜单项日…………………194426绘制彩色线条…………………119642插入菜单项目……1954.3使用画刷绘图……643删除菜单……43.1简单画刷…………………121644动态添加的菜单项的432位图画刷…………122命令响应1994.33透明画刷…12465电话本示例程序2004.4绘制连续线条130651动态添加子菜单的实现…………2014.5绘制扇形效果的线条……132652显示输入的字符……203第5章文本编程……135653添加菜单项及其俞令响应函数5.1插入符…………………………1356.54框架类窗口截获菜单51.1创建文本插入符………………135命令消息512创建图形插入符…………13966本章小结21852窗口重绘………………………140521 On Draw函数第7章对话框(14l522添加字符丰资源1对话框基本知识…2195.3路径…曾中中即44471.1常用控件介绍54字符输入149712对话框的种类220541设置字体…15372对话框的创建和显示…0542字幕变色功能的实现……1567.2.1模在对话框的创建……2245.5本章小结16I722非模态对话框的创建第6章莱单73动态创建按钮…………2816274控件的访问…2326,1菜单命令响应函数74.1掉件的调整…23262菜单命令的路由…165742静态文本控件……………233621稈序类对菜单命令的7.4.3编辑框控件…响应顺序……1657.5对话框伸缩功能的实现248