VC++60教程讲座

上传人:熏** 文档编号:81957183 上传时间:2022-04-28 格式:DOCX 页数:72 大小:1.70MB
返回 下载 相关 举报
VC++60教程讲座_第1页
第1页 / 共72页
VC++60教程讲座_第2页
第2页 / 共72页
VC++60教程讲座_第3页
第3页 / 共72页
点击查看更多>>
资源描述
VC6讲座一VC简介与安装“到底是学VC,还是学VB呢?”相信不少朋友在学习Windows编程之前都曾经想过这个问题,并一度感到难以取舍。心铃认为,Visual C+和Visual Basic都是非常优秀的可视化编程工具,刚刚涉及Windows编程的朋友选择VB可以很快上手,而有一定C/C+和Windows编程基础的朋友可能会更喜欢VC一些。虽然学习和使用VC需要付出更大一些的工作量,但是掌握了VC编程后,可以加深我们对Windows系统及其使用的各种技术的理解,所以心铃决定继VB和VFP讲座之后,再次带领有兴趣学习VC的朋友开始一趟VC之旅。在出发之前,心铃建议朋友们准备一点干粮和水(事先应掌握一些C/C+和Windows编程方面的基础知识),不过即使带少了或者路途中间出现什么问题也没有关系,相信在VC这个大家庭中处处都有温情在,软件报事先已经向大家介绍了很多可以休息和加油的VC驿站,另外心铃信箱也已经准备好了为大家提供必要的帮助。VC简介大家是否知道,作为一种C/C+语言的集成开发环境(IDE),产生VC的最早的根源其实要追溯到DOS时代的Borland公司,当初Borland公司开发的Turbo Pascal和Turbo C让程序员们深刻感受到了把编辑器和编译器集成在一起的IDE是多么的方便,微软也看到了这一优点,于是相继开发了Quick C和Microsoft C/C+等多个DOS版本的C/C+集成开发工具。随着Windows的不断成熟,微软决定放弃DOS下的开发工作,正式推出了Windows下的Visual C+ 1.0,早期的VC功能并不什么强大,使用起来也不方便,1.0版和1.5版都是16位编程工具。VC的革命性改变得益于Windows 95的推出,从VC 2.0开始,微软又放弃了16位编程,以后的VC都只用于32位编程开发,为了与MFC类库的版本号保持一致,微软跳过了版本3,直接推出VC 4.0,这个版本及修订版4.2的部分界面风格一直被保留到最新的VC 6.0中。从VC4到VC6,VC的各种功能不断增强,MFC类库的内容也越来越丰富,现在利用VC开发应用程序已经是一件相当轻松的事情了(心铃在心里嘀咕:先把大家“骗”上车,轻不轻松是天知、地知、我知、以后你才知)。在VC发展的同时,Borland(现在叫Inprise)也在不断改进它的C/C+开发工具,并相继推出了Borland C+和C+ Builder等产品,其实,现在的C+ Builder也是一个非常优秀的开发工具,但是基于下面的几点原因,心铃还是准备先向大家介绍VC:首先,VC的核心MFC类库已是事实上的业界标准,Borland自己开发的类库也在向MFC看齐;其次,VC与Visual Studio中的其它可视化开发工具紧密集成,可用于开发非常专业的Windows、Web和企业级应用程序;第三,VC的联机帮助已被集成到MSDN(微软开发者网络)库中去了,后者包含了微软大部分产品的技术文档和支持资料,内容相当丰富,是程序员不可多得的参考资料,现在MSDN库随着Visual Studio 6.0一起发行,实在是大家的福音。目前VC的最新版本是VC6,属于微软可视化开发套件Visual Studio 6.0中的一项重头戏。VC6引入了多项出色的新功能,例如智能感应(IntelliSense)技术,程序员在键入代码时,VC6的编辑器能自动把属性、参数信息、数据类型信息、代码信息罗列出来,供程序员选择并自动完成输入,这种技术源自于VB5,现在已被应用到了VC6、VJ6和IE5中,有了它之后,程序员无需去记忆复杂的语法、参数和构件属性,从而提高了编程效率。另一项典型的新技术是即编即调(Edit and Continue),现在程序员可以直接在调试过程中编辑代码,而不用象以前那样,需要先退出调试状态,然后编辑,重新编译连接,并启动调试器,再跟踪到发生问题的地方。此外,VC6还具有动态更新类视图、延迟加载、支持IE 4.0通用控件等等众多的新特性。心铃重点介绍VC6的一些好东东的意思想必大伙儿已经明白了,那就是讲座中我们要使用VC6,目标仍然是开发一个简单的应用程序,还没有准备好Visual Studio 6.0光盘的朋友赶快行动吧,不然就要掉队啰,因为我们马上就要开始安装VC6了。安装VC6Visual Studio 6.0企业版一共有六张光盘,其中后两张是MSDN库,如果只安装VC6,那么需要用到第一张光盘和MSDN库(中文版与此略有区别)。VC6可以安装到所有运行Windows 95/98/NT4/2000的机器上,但Windows 95和NT4必须先安装IE4。为了提高工作效率,心铃建议大家给自己的机器安装64兆以上的内存,硬盘至少应有1G以上的自由空间,至于CPU的主频当然是越高越好。以Windows 98为例,把Visual Studio 6.0的第一张光盘插入光驱中,运行光盘根目录下的Setup.exe,这是主安装程序,它首先将对系统进行检查,根据需要更新系统中的Microsoft Java虚拟机,并安装DCOM98,为了完成这个过程可能需要重新启动系统两次。如果系统中原来安装有Visual Studio 97的部件,接下来主安装程序会询问要不要卸载这些部件,由于Visual Studio 6.0可以和Visual Studio 97的部件共存,所以我们可以根据自己的需要来决定是否卸载。下一步主安装程序将询问我们Visual Studio 6.0通用文件的安装路径,然后启动可视化工具的安装程序。图1-1:选择安装Visual Studio 6.0的部件在指定了可视化工具的安装路径后,心铃建议大家至少应安装如图1-1所示的四个项目,即VC6、附加的ActiveX控件、数据存取部件和一些辅助工具,这些内容可用于一般应用程序的开发工作,大致要占用350MB左右的硬盘空间。安装完VC6之后,又需要重新启动一次系统,然后主安装程序将启动MSDN库的安装程序。如果硬盘空间允许的话,心铃建议大家安装“全文搜索索引”、“VC6帮助文档”、“Platform SDK文档”和“全部其它文档”共四项,这些内容基本上可以满足一般编程工作的需要,大致要占用550MB左右的硬盘空间。至于VB、VFP等可视化开发工具的帮助文档可以仍然放在光盘上,当我们需要查阅时,MSDN库的帮助浏览程序会自动提示插入所需的MSDN光盘。另外,VC6还带有大量的样例程序,它们都被放在了MSDN库的第一张光盘上,需要时可从上面拷贝。MSDN库安装完后,主安装程序会继续询问是否安装其它一些客户端和服务器端的工具,大家可以根据自己的需要来选择,例如将来要制作安装程序的话,可安装一份InstallShield,如果是在NT4上安装Visual Studio 6,还可安装一份NT4 Option Pack。图1-2:Visual Studio 6.0和MSDN的程序组Visual Studio 6.0安装完毕后,开始菜单的程序中应生成了如图1-2所示的Microsoft Visual Studio 6.0和Microsoft Developer Network两个程序组。Visual Studio 6.0是98年下半年发布的,由于其中还存在着很多Bugs,以及微软在Java诉讼案中败诉等原因,截止到99年5月底,微软已经专门为Visual Studio 6.0推出了三次Service Pack,即软件更新包,其中SP1解决了与老版本Visual Studio工具存在着的二进制兼容性问题,SP2又更换了Java虚拟机,新近发布的SP3则再次修订了大量的Bugs,因此心铃建议大家在安装完VC6后,再找一份SP2或SP3来打个补丁,SP2可在某些报纸的配套光盘上找到,SP3则暂时需要到微软的MSDN站点上去下载。名词释疑:集成开发环境IDE:IDE即Integrated Development Environment,它把编辑器、编译器、连接器和调试器等编程工具集成在一起,程序员不需要离开IDE便可完成编写、编译、运行、调试程序等工作。VC的主程序Developer Studio就是一个典型的IDE。MFC类库:MFC是Microsoft Foundation Class的缩写,这是由微软编写的一套专门用于Windows编程的C+基础类库,其内容很广泛,功能也相当强大。VC编程基本上都是围绕着MFC类库来进行的。VC6讲座(二)VC6开发环境的一般使用(上)在上一讲中心铃带领大家安装好了VC6,相信有的朋友早就等不及第二讲,自己已经开始钻研VC6很长一段时间了。好吧,下面心铃就继续开讲,介绍VC6开发环境的一般使用方法。开发环境窗口的典型界面从Visual Studio 6.0的程序组中运行VC6,便可启动VC6的开发环境Developer Studio。每次运行VC6时,首先会弹出一个“Tip of the Day”的对话框,其中介绍有很多关于开发环境的使用方法以及编程调试方面的小技巧,如果不想看它,可以选择在下一次启动时不再显示它。图2-1:VC6开发环境的典型界面第一次进入VC6时,窗口中几乎什么也没有,所以心铃决定先打开一个工程后再来介绍,图2-1就是VC6在打开了一个工程之后的典型界面。由图可见,VC6的窗口被分成了几部分,最上面是标题条、菜单和工具栏,中间左边的树视图是Workspace窗口,右边是多个文档窗口,显示有正在编辑的文本文件(或资源),下方是Output窗口和状态条。图2-1是在屏幕分辨率为800600时截下来的图片,整个窗口布局仍然显得很拥挤,即使把文档窗口最大化,一屏也只能同时显示十来行源代码,因此心铃在工作时都把屏幕分辨率设成1024768,这样对编辑和调试工作很有利,大家可根据显示器的实际情况来设置,如果显示器太小了也不要勉强设置成高分辨率,要注意爱护自己的眼睛。除了主菜单和工具栏外,VC6开发环境还提供了大量的上下文关联菜单,用鼠标右键的单击窗口中很多地方都会弹出一个关联菜单,里面包含有与被单击项目相关的各种命令,心铃建议大家在工作时可以试着多点点鼠标右键,说不定会发现很多有用的命令,从而大大加快一些常规操作的速度。调整窗口布局VC6的智能化界面允许用户灵活配置窗口布局,例如菜单和工具栏的位置都可以重新定位。让我们在菜单或工具栏左方类似于把手的两个竖条纹处或其它空白处点击鼠标左键并按住,然后试试把它拖动到窗口的不同地方,就可以发现菜单和工具栏能够停靠在窗口的上方、左方和下方,双击竖条纹后,它们还能以独立子窗口的形式出现,独立子窗口能够始终浮动在文档窗口的上方,并且可以被拖到VC6主窗口之外,如果哪位朋友拥有双显示器,甚至可以把这些子窗口拖到另外一个显示器上,以便进一步加大编辑区域的面积。Workspace和Output等停靠式窗口(Docking View)也能以相同的方式进行拖动,或者切换成独立的子窗口,此外,这些停靠式窗口还可以切换成普通的文档窗口模式,不过文档窗口不能被拖出VC6的主窗口,切换的方法是选中某个停靠式窗口后,在“Windows”菜单中把“Docking View”置于非选中状态。VC6提供有很多工具栏,图2-1只显示了“Standard”、“Build MiniBar”和“WizardBar”三个最常使用的工具栏。在工具栏右边空白处单击鼠标右键,就会弹出一个关联菜单,在其中可以选择显示哪些工具栏。由于某些工具栏只在编辑资源或调试程序时才有用,所以在编辑源程序时不必将它们都显示出来。图2-2:定制对话框VC6允许用户定制工具栏和菜单,从“Tools”菜单或者前面提到的关联菜单中选取“Customize”命令,就会弹出图2-2所示的定制对话框,这个对话框一共有五栏。在第一栏“Commands”中,我们可以从“Category”下拉列表框中选择命令类别,然后在右边给出的各种按钮中选择合适的命令,并将之拖动到工具栏或菜单中,以完成对工具栏或菜单的定制;在第二栏“Toolbars”中,我们可以确定显示哪些工具栏,以及显示的方式,另外还可以自己创建新的工具栏,并回到“Commands”中定制新建的工具栏,利用此功能可以把自己经常使用的一些命令集中放在一起,有利于提高工作效率;第三栏“Tools”用于定制外接工具;第四栏“Keyboard”用于定制快捷键;第五栏“Add-Ins and Macro Files”用于定制附加工具和宏,尽管宏的功能很强大,但是心铃估计没有几位朋友会用到它。Workspace和Output窗口Workspace和Output是在编程过程中使用得最多的两个停靠式窗口,以后我们经常要和它们打交道。Workspace窗口显示了当前工作区中各个工程的类、资源和文件信息,当我们新建或打开一个工作区后,Workspace窗口就会出现三个树视图:ClassView(类视图)、ResourceView(资源视图)和FileView(文件视图),如果在VC6企业版中打开了数据库工程,还会出现第四个视图DataView(数据视图)。如同前面所说的,在Workspace窗口的各个视图内单击鼠标右键可以得到很多有用的关联菜单。图2-4:ResourceView图2-3:ClassViewClassView(图2-3)里面显示了当前工作区中所有工程定义的C+类、全局函数和全局变量,展开每一个类后,可以看到该类的所有成员函数和成员变量,如果双击类的名字,VC6会自动打开定义这个类的文件,并把文档窗口定位到该类的定义处,如果双击类的成员或者全局函数及变量,文档窗口则会定位到相应函数或变量的定义处。ResourceView(图2-4)显示了每个工程中定义的各种资源,包括快捷键、位图、对话框、图标、菜单、字符串资源、工具栏和版本信息,如果双击一个资源项目,VC6就会进入资源编辑状态,打开相应的资源,并根据资源的类型自动显示出Graphics、Color、Dialog、Controls等停靠式窗口。图2-5:FileViewFileView(图2-5)显示了隶属于每个工程的所有文件。除了C/C+源文件、头文件和资源文件外,我们还可以向工程中添加其它类型的文件,例如Readme.txt等,这些文件对工程的编译连接不是必需的,但将来制作安装程序时会被一起打包。同样,在FileView中双击源程序等文本文件时,VC6会自动为该文件打开一个文档窗口,双击资源文件时,VC6也会自动打开其中包含的资源。在FileView中对着一个工程单击鼠标右键后,关联菜单中有一个“Clean”命令,心铃在此特地要解释一下它的功能:VC6在建立(Build)一个工程时,会自动生成很多中间文件,例如预编译头文件、程序数据库文件等,这些中间文件加起来的大小往往有数兆,很多朋友在开发一个软件期间会使用办公室或家里的数台机器,如果不把这些中间文件删除,在多台机器之间使用软盘拷贝工程就很麻烦,“Clean”命令的功能就是把VC6生成的中间文件全部删除,避免了手工删除时可能会出现误删或漏删的问题。另外,在某些情况下,VC6编译器可能无法正确识别哪些文件已被编译过了,以致于在每次建立工程时都进行完全重建,很浪费时间,此时使用“Clean”命令删除掉中间文件就可以解决这一问题。与Workspace窗口一样,Output窗口也被分成了数栏,其中前面四栏最常用。在建立工程时,Build栏将显示工程在建立过程中经过的每一个步骤及相应信息,如果出现编译连接错误,那么发生错误的文件及行号、错误类型编号和描述都会显示在Build栏中,用鼠标双击一条编译错误,VC6就会打开相应的文件,并自动定位到发生错误的那一条语句。工程通过编译连接后,运行其调试版本,Debug栏中会显示出各种调试信息,包括DLL装载情况、运行时警告及错误信息、MFC类库或程序输出的调试信息、进程中止代码等。两个Find in Files栏用于显示从多个文件中查找字符串后的结果,当你想看看某个函数或变量出现在哪些文件中,可以从“Edit”菜单中选择“Find in Files”命令,然后指定要查找的字符串、文件类型及路径,按“查找”后结果就会输出在Output的Find in Files栏中。从多个文件中查找字符串的功能很有用,嘿嘿,心铃就经常利用VC的这个功能来从下载的大量网页中查找感兴趣的东西,而不仅仅是使用VC来编程。菜单功能简介VC6开发环境具有十分丰富的菜单命令,并且会自动根据当前编辑的状态设置某些命令为有效或无效,或者切换显示一个不同的菜单。如果某个菜单命令前面带有一个图标,那么表示它在工具栏中有对应的按钮。在编辑文本文件时,菜单共有九项。“File”菜单列出了与文件操作有关的命令;“Edit”菜单列出了与编辑有关的命令;“View”菜单可以调出很多具有特殊用途的对话框,或者把当前文档窗口切换成全屏幕显示方式;“Insert”菜单用于向工程中插入新的类、资源和Form型对话框,或者把文件作为文字插入到当前正在编辑的文本文件中;“Project”菜单列出了与工程有关的命令,包括设置活动工程,向工程中添加文件、部件或ActiveX控件,修改工程的设置等;“Build”菜单用于建立工程,并启动调试器来运行已生成的可执行文件;“Tools”菜单不仅列出了很多有用的工具,如Source Browser、外接工具、宏等,另外还可以对VC6开发环境的各项设置进行调整;“Windows”菜单列出了调整各个子窗口的状态与排列方式的命令,以及当前打开的所有文档窗口;“Help”菜单列出了与获取帮助相关的命令。此外,进入调试状态后,“Build”菜单会被“Debug”菜单取代,后者列出了各种调试命令。在编辑对话框、图标等资源时,还会出现“Layout”和“Image”等菜单。一下子讲了这么多,大家是不是已经开始有点迷糊的感觉了?不过不要紧,VC6的智能化界面允许我们大胆去尝试,去寻找最符合自己使用习惯的界面布局,所以熟练掌握VC6开发环境的使用方法的关键还在于自己要多动手,多实践。在下一讲中,心铃将要介绍VC6的文本编辑器和帮助系统的一些特点和使用方法,并重点讨论MSDN帮助系统,告诉大家如何查询帮助,以及MSDN库各个部分所包含的内容有什么用途,好吧,下周再见。名词释疑:工程(Project):工程又称为项目,它具有两种含义,一种是指最终生成的应用程序,另一种则是为了创建这个应用程序所需的全部文件的集合,包括各种源程序、资源文件和文档等等。绝大多数较新的开发工具都利用工程来对软件开发过程进行管理。工作区(Workspace):工作区是对工程概念的扩展。一个工程的目标是生成一个应用程序,但很多大型软件往往需要同时开发数个应用程序,VC开发环境允许用户在一个工作区内添加数个工程,其中有一个是活动的(缺省的),每个工程都可以独立进行编译、连接和调试。资源(Resource):Windows的可执行文件内部可以存储图标、位图、对话框、字符串、菜单等多种数据,这些数据可以被程序自身或其它程序多次利用,因而把它们称为资源。除了能重复利用外,使用资源的另一项好处是可以很方便地把菜单及提示信息翻译成其它语言。VC6讲座(三)VC6开发环境的一般使用(下)上一讲我们学习了VC6开发环境的界面特点和一些使用要点,大家在课后一定已经做了不少练习吧,在本讲中心铃准备继续向大家介绍VC6的文本编辑器和帮助系统,这两者可都是今后天天要用到的哦。文本编辑器图3-1:VC6的文本编辑器VC6拥有一个专门为C/C+程序员设计的文本编辑器,功能很强大,智能化程度也非常高。除了C/C+语言外,这个文本编辑器还可用于编辑VBScript、SQL、HTML和ODL/IDL等语言的源代码。图3-1的文本窗口显示了用C语言编写的一个经典程序Hello World,从中我们可以看出VC6文本编辑器的一些基本特点。文本窗口的标题条显示了正在编辑的文件名,如果文件名后面带有一个星号,表示该文件做过修改后还未存盘,如果文本窗口处于最大化状态,VC6主窗口的标题条也会以相同方式来反映当前文档是否已经存盘。心铃在此要提醒大家在编程时应随时注意存盘,以避免遭受意外损失。与Word类似,文本窗口的滚动条旁边也有两个分割条,拖动它们可以把文本窗口分成最多四个子窗口,用于显示同一个文件的不同部分,其中水平的两个子窗口是垂直联动的,而垂直的两个子窗口是水平联动的。除了分割条外,“Windows”菜单中的“New Window”命令还可为同一文件打开多个窗口视图,并且在任何一个窗口中做的修改会立刻反映到其它窗口之中。文本窗口中可编辑区域的左边有一个灰色的竖条,其用途是显示临时书签(蓝色方块)、断点(红色园点)和调试过程中的下一条要执行的语句(黄色箭头)。文本编辑器支持两种类型的书签。一种是临时书签,从Edit工具栏中点击左边的小蓝旗图标后,文本编辑器就会在当前输入焦点处设立一个临时书签,临时书签在关闭工作区之后就失效了。另一种是永久书签,从“Edit”菜单中选取“Bookmarks”命令后,我们可以在当前输入焦点处设定一个永久书签,并为它取一个名字,永久书签在下次打开工作区时仍然有效。无论是临时书签还是永久书签,都可以通过点击Edit工具栏中的两个浏览书签按钮来实现快速定位。文本编辑器使用不同的颜色来标识程序中的不同内容,绿色部分为注释,蓝色部分为C/C+定义的关键字,其它内容为黑色,这种显示方法有助于减少输入错误,例如我们想输入一个关键字“int”,却不小心敲成了“itn”,此时文本编辑器不会将它显示成蓝色,我们也就能及时发现错误。按下“Alt+Enter”键或者从“View”菜单中选择“Properties”命令,调出文本窗口的属性,其中会指出该文档为C/C+语言,如果强行将之改为其它语言,文本窗口中的关键字集合也就会跟着变化。输入程序时使用缩进式风格是一种良好的编程习惯,VC6文本编辑器支持自动缩进,能够把函数、条件语句和循环语句作用域内的语句自动缩进4个空格,这一缺省值可在文本窗口的属性中更改。如果在编辑过程中没有遵循缩进式风格,或者从别的地方拷贝来的程序显示得乱糟糟的,我们还可以先选中一段代码,然后利用“EditAdvanced”菜单中的“Format Selection”命令(图3-2)来格式化这段代码。“EditAdvanced”菜单中的其它命令也很用:“Incremental Search”是对标准搜索方式的补充,按下它的快捷键“Ctrl+I”后,连续输入要查找的单词的每个字符,文本窗口在每输入一个字符时都会迅速定位到第一个匹配的单词处,输入完毕后再按“Ctrl+I”,还可快速定位到下一个匹配的单词处;“Tabify Selection”的功能是把选中代码段的多余空格转换成制表符Tab;“Untabify Selection”的功能正好相反,即把所有制表符转换成空格;“Make Selection Uppercase”和“Make Selection Lowercase”分别把选中代码段转换成大写字母或小写字母;“View Whitespace”的功能是显示出源代码中间的空格和制表符。图3-4:输入函数图3-3:输入类成员图3-2:编辑菜单中的高级命令与老版本相比,VC6文本编辑器最激动人心的改进莫过于增加了智能感应(IntelliSense)技术,心铃当初就是被这一功能吸引,立刻舍弃了VC5,转而使用VC6。当我们键入源代码时,智能感应技术能够把函数参数、类或结构的成员等信息显示在一个提示条或列表框中,供我们选择并自动完成输入,这项技术为编程工作带来了极大的方便。图3-3是输入类成员时的例子,当我们在列表框中找到需要的成员函数后,只要按一下回车键或“Ctrl+Space”,编辑器便会自动把“GetDocument”补全。图3-4是输入函数时的例子,函数名输入完毕后,编辑器自动弹出一个提示条,其中给出了printf函数的原型定义,并且把下一个要键入的参数的类型用粗体字符显示出来了。当我们把光标移到一个函数名(或变量名)上时,编辑器同样会把该函数的原型定义(或变量类型)显示在提示条中(见图3-1)。除了在键入程序的过程中文本编辑器会弹出上述提示条或列表框外,我们还可以把输入焦点移至合适的地方,然后从“Edit”菜单最下方选取“List Members”、“Type Info”或“Parameter Info”命令(见图3-2),同样能够激活智能感应技术,显示出相应的提示条或列表框。MSDN帮助系统与VC5相比,VC6不再把帮助集成在开发环境的内部,转而提供了一个专门为Visual Studio 98设计的完整的MSDN库,Visual Studio 98各个产品的绝大部分帮助都包含在MSDN库中。MSDN库使用了自Windows 98正式引入的HTML帮助系统,虽然这是一个独立的程序,但是由于拥有灵活和功能强大的API接口,MSDN库仍然能与Visual Studio 98紧密集成,从VC6中可以很方便地调用MSDN库。在VC6开发环境中有很多方法可以启动MSDN库:从“Help”菜单中选取“Contents”、“Search”或“Index”命令;点击Standard工具栏中的搜索按钮;当输入焦点处于编辑窗口或输出窗口中的某些内容时按下F1键。这些操作都会运行如图3-5所示的MSDN库,从图中可以看出,MSDN库的用户界面比其它的HTML帮助要稍微复杂一些,它拥有自己的菜单和更多的选项,用户图3-5:MSDN帮助系统还可自己定义活动子集和书签。MSDN库共有两张光盘,内容相当丰富,称得上是Visual Studio 98用户和Windows开发人员的良师益友,不过,即使是中文版Visual Studio 98,MSDN库中的大多数文章也还未翻译成中文,这对于国内用户来说是一个不小的障碍,不过英文基础较弱的朋友也不要泄气,在金山词霸等翻译软件的帮助下,多阅读几篇文章自然就会慢慢熟悉的。MSDN库目录栏中列出了库中包括的主要内容,前面几项分别是Visual Studio、VB、VC、VFP、Visual InterDev、VJ和Visaul SourceSafe各自的帮助文档;“Tools and Technologies”介绍了ASP、ActiveX控件、FrontPage、Proxy Server等工具和软件技术的使用与开发方法,其中有一节介绍了如何利用MFC类库把C程序移植成C+程序,值得一读;“Microsoft Office Development”介绍了开发Office 95/97的一些知识;“Platform SDK”的前身是WIN32 SDK,这部分内容相当重要,其中包括了在32位Windows家族下开发WIN32应用程序的各种基础知识,并有全部WIN32 API函数的详细说明;“SDK Documentation”是一些未能划归到“Platform SDK”的SDK文档;“DDK Documentation”包括Windows 95/NT4/CE和Smart Card(智能卡)的DDK文档;“Windows Resource Kits”给出了Windows 95/NT 3.51/NT4和BackOffice的资源大全手册;“Specifications”给出了Windows系统用到的部分软硬件技术的规范,例如TrueType字体规范、RFT文档规范、即插即用规范等等,很有参考价值;“Knowledge Base”也是MSDN库中的重头戏,这个知识库中包含了微软绝大部分软件产品在使用过程中可能出现的问题,以及一些使用和开发上的信息,心铃看了其中的部分条目后,立刻产生了微软的产品都是垃圾的感觉,因为这些软件到处都是问题(开玩笑);“Technical Articles”中有大量由资深开发人员撰写的技术文章,内容相当广泛,某些文章有一些难度,是深入学习Windows编程的好材料;“Backgrounders”里面的文章侧重阐述一些软件技术与产品的背景知识;“Books”是一些由微软出版社出版的经典计算机书籍,而“Partial Books”是从一些较新书籍中摘录的部分章节;“Periodicals”中收集了一些期刊杂志上发表的部分技术文章;“Conference Papers”中收集了95-97年TechEd和PDC会议上发表的技术文章。为了提高查找资料的速度,MSDN库支持活动子集的概念,用户可以选择只显示库中一小部分集合的内容,切换过程相当简单快速。MSDN库还允许用户定义自己的活动子集,从“查看”菜单中选取“定义子集”命令,然后为新子集选择合适的项目,指定名字并保存即可。MSDN库的全文搜索功能支持四种逻辑条件组合:AND、OR、NOT和NEAR,例如“dib AND palette”的含义是搜索同时包含单词dib和palette的文章,“raster OR vector”的含义是搜索包含单词raster或vector的文章,“ole NOT dde”的含义是搜索包含单词ole,但不包含dde的文章,而“user NEAR kernel”的含义是搜索同时包含单词user和kernel,并且它们间隔在八个单词以内的文章。由于MSDN库中内容太多,灵活运用这些逻辑条件组合可以有效地减少搜索结果,更快地找到需要的资料。在某些情况下,从索引栏或全文搜索结果中打开的部分文章无法使用定位功能,原因是它们没有与之相对应的目录项,这些文章是MSDN库中的“黑户”,我们无法从目录栏中直接访问它们,但可以通过搜索功能找到它们,并利用其中的超级链接访问附近的相关内容。到现在为此,VC6开发环境的使用方法就介绍完了,大家不妨多用用,多看看MSDN库中的文章。从下一讲开始,心铃将带领大家开始学习使用VC6来编写具体的程序,我们的目标是一个简单的日程安排程序,下一讲中将首先对这个程序进行构思,提出要求,并设计程序中要用到的数据结构。名词释疑:函数原型(Prototype):函数原型标识了一个函数的返回类型,以及该函数参数的个数和类型。为了处理对某个函数的调用,C+编译器必须知道该函数的原型,通常C+编译器从函数定义或专门的函数声明语句中获得函数原型。SDK:SDK是Software Development Kit(软件开发工具包)的缩写,这种开发工具包一般包含有一系列的库文件、头文件、工具、联机帮助和样例程序,用来帮助程序员开发某一方面的软件。DDK:DDK是Device Drivers Kit(设备驱动程序开发包)的缩写,与SDK很类似,其用途是帮助程序员开发硬件设备在Windows下的驱动程序。VC6讲座(四)设计一个日程安排程序很快一周又过去了,不知道大家对VC6开发环境使用得如何?从本周起,心铃就要开始讲述一个简单程序的编制过程了。在第四讲中,我们首先要构思好这个程序的目的、功能、界面特点,以及程序中将用到的数据结构。软件工程对于初学编程的朋友来说,“软件工程”这个词听起来好象有点太大了的感觉,一项工程要经过立项、设计、方案论证、施工、验收数个阶段,编写一个软件可以和工程相提并论吗?是否有这个必要?的确,现在的计算机具有相当快的处理速度,智能化的开发工具又大大减轻了程序员的工作量,编写和修改程序都不是一件特别困难的事情,在这种情况下,很多朋友养成了有想法后就立即开始编程,然后在编写过程中不断地修改思路。应该说,在编写比较小的软件时,这种方法并没有什么不妥之处,也不会多用多少时间,但是在编写一个大软件,尤其是多人一起合作搞开发的时候,一边编程一边设计就会带来很多问题,因为一点局部的小改动没准会牵动着全局,此时小改动就变成了大改动,不仅程序员的工作量会增大,而且有可能影响到整个项目的进度,如果在开发后期或测试阶段才发现设计上存在着问题,那么需要很高的代价才能改正这一问题。因此,我们如果能够学习前人的经验,从比较系统的角度来看待一个软件的开发过程,就可能会少走一些弯路。当初学习软件工程这门课程时,心铃的成绩很糟糕,现在编程仍然会时不时地忘记了先设计后动手这个原则,不过,为了加深大家的印象,心铃在下面就按照软件开发的大致要求来依葫芦画瓢一番,当然,真正要理解、掌握与应用软件工程学提倡的一些思维方法不是短时间内能做到的,有志于成为编程专家的朋友可以加深对这方面知识的学习。在开始具体编程之前,我们首先要确定几个前提条件:一是确定需要解决的问题;二是通过对问题的分析,列出比较明确的需求目的;三是进行程序的结构设计;四是选择什么样的编程语言来完成该任务。设计日程安排程序我们的系列讲座的目的是介绍Visual C+语言,带领初学者入门,为此需要设计一个既简单又能体现VC一些基本用法和特点的程序,心铃构思了一个日程安排程序,要求它能够在预定的时间提醒用户一些预选设定的事情,这便是需要解决的问题。针对这个问题,我们要求最终的日程安排程序应该具有以下一些功能:用户可以随时添加一个事件,设定报警时间,并输入对事件的简要描述;只要程序处于正常运行状态,某项事件的预订的报警时间到了之后,能够通过弹出窗口等措施来提醒用户;用户可以随时修改或删除已经添加的项目;已报过警的项目仍然保留,并使用不同的颜色(或其它措施)来表示该项目目前的状态;程序被关闭后,能够保存已添加的各个事件,并且在下一次启动时,自动检查已保存的项目是否过期。此外,该程序还应满足下面的一些要求:原则上没有对事件总数的限制;使用长时间格式,不出现2000年问题;操作简便;为了便于向初学者介绍,程序不宜使用复杂的界面效果和编程技巧。进行结构设计时应考虑程序中要用到的数据结构、关键算法、用户界面、输入输出与存储格式,还有整个程序的组织方式,以及如何进行错误处理等,本讲后面要重点讨论日程安排程序的数据结构、用户界面和文件存储格式。第四种前提条件则无须进行过多的讨论,因为我们肯定要使用Visual C+,或者说是可视化的C+语言。设计事件条目的数据结构从简化程序的角度出发,同时考虑到VC的特点,心铃把事件条目设计成有三个成员的结构:struct ScheduleItemCTime ti;CString des;int state;其中变量ti的类型为CTime,用来记录报警的时间。CTime和下面的CString都是MFC类库中定义的C+类,它封装了ANSI(美国国家标准协会)定义的一种标准时间结构time_t,该结构的大小为四个字节,精度为秒,可以表示的时间范围为1970年1月1日到2038年1月18日,虽然范围并不大,但用在我们的例子中还是足够了。CTime有不少成员函数,可以分别取回年月日和时分秒,或者进行格式转换,利用CTime重载的运算符(C+的术语已经出现不少了,忘了的朋友可以再温习一下)可以很方便地比较两个时间,或者加减一个时间片(由CTimeSpan类定义),这是C+语言上的优点带来的好处。变量des用于存储描述事件内容的字符串,它的类型为CString,这个类封装了字符串。使用过VB的朋友都知道,Basic语言具有很强的字符串处理能力,在VB中我们可以直接把字符串相加,可以直接比较字符串,使用起来相当方便,然而C语言的设计者们没有把处理字符串的能力直接融入到语言本身,只是提供了一些标准的字符串函数来完成相加和比较这样的操作,使用起来很不直观。C+语言是从C语言的基本上发展起来的,继承了C语言的很多特点,其中包括处理字符串的能力弱的特点,不过,由于C+支持重载运算符,这就为我们提供了除标准字符串函数外的另一种解决方案:即利用类来封装字符串,并通过重载运算符来简化很多种字符串操作,CString类就是这一方案在MFC类库的实现,它使用起来几乎与VB一样方便。不过,CString拥有为数众多的成员函数,要想完全了解和掌握它,我们还需要仔细阅读MSDN库中的帮助,并动手多做一些试验。变量state用于表示事件的状态,我们为事件规定三种状态:当预定报警时间距离当前时间还有15分钟以上时,处于状态2(即state的值为2);当预定报警时间在当前时间的前后15分钟之内,为状态1;当预定报警时间已经过了15分钟之后,为状态0。安排15分钟的提前量比较符合多数人的习惯。ScheduleItem是单个事件的数据结构,那么如何在内存中同时存储多个事件呢?心铃选择了链表的形式,不过不是由我们自己来实现这个链表,而是通过MFC类库中的CObList类来实现。CObList可以按顺序存储一系列CObject对象的指针,相当于一个双向链表,利用CObList的成员函数,我们可以进行插入、删除、获取和查找某个指针等操作,当CObList本身或者存储在其中的指针被删除时,指针所指的对象并不会被删除。CObject是MFC类库中一个最为基础的类,类库中大多数的类都是从它继承而来,CObject本身也是一个相当抽象的概念,因为在理论上它可以代表所有的对象(当然是指C+对象,而不是生活中的对象啦),或者说它具有所有对象的共性。心铃本来打算把ScheduleItem也设计成一个类,并且以CObject为基类,后来感觉这样理解起来的难度比较大,最后还是改成了结构,但是链表仍然使用了CObList,没有改用功能与之相近,存储的指针为void类型的CPtrList。设计用户界面确定了事件条目的结构后,我们准备使用一个列表窗口(类似于资源管理器中以详细方式显示的文件列表窗口)来显示当前定义的所有事件条目,为了便于说明,图4-1给出了日程安排程序在讲座中的最终模样,这个列表窗口分为两格,第一格的内容为时间,借助于列表窗口的特点,我们在时间前面加上了一幅位图,通过位图的颜色来表示该事件的状态,列表窗口的第二格显示了对事件的说明信息。用户对事件条目可以进行三种操作:添加、删除和修改,程序的主菜单、工具栏和关联菜单中都提供有这三种操作对应的命令或按钮,从而最大限度地为用户提供方便。图4-2:添加修改事件条目的对话框图4-1:日程安排程序的主窗口在添加和修改事件条目时使用了同一个对话框,如图4-2所示,其中用到了VC6才新加入的“Date Time Picker”控件,即“选时控件”,让用户可以很方便地输入报警时间。文件存储格式为了在程序退出之后仍然能够保存已经输入的内容,我们必须把事件条目存放在文件之中。心铃只准备用一个很简单的文本文件来记录各事件,格式如下所示:1999/6/29,10:20:00,去图书馆1999/6/29,21:20:00,给父母写信1999/6/30,15:20:00,去买朋友的生日礼物1999/6/30,19:00:00,到朋友家去其中每一行为一条事件记录,每条记录包含了时间和描述信息两部分内容,有的朋友可能会问为什么记录中事件状态的位置,这并不奇怪,因为事件的状态随着时间的推移在动态改变,没有必要把它保存在相对静态的文件中。程序在启动时自动打开这个文本文件,读取其中的内容,根据当前的系统时间确定事件的状态,然后把各条目进行排序后存放在链表之中。每次用户进行了添加、删除和修改操作之后,程序自动重写文本文件,用新的内容覆盖掉旧的内容,如果只是某项事件的状态发生改变,就不必进行存盘操作。好了,对日程安排程序的介绍就到这里,是不是很简单?本讲中提到的CTime、CString和CObList等类在后面的编程中要经常用到,所以大家不妨仔细研究一下这几个类,同时加深一下对CObject类的理解。在下一讲中,心铃将开始向大家介绍如何使用VC6的AppWizard(应用程序向导)来生成一个VC程序的基本框架。VC6讲座(五)使用AppWizard(上)在上一讲中心铃介绍了日程安排程序的设计要求。程序虽然简单,要完成它仍然需要用到VC的许多基本功能。在本讲和下一讲中,我们首先来学习使用VC的一个重要工具AppWizard。什么是AppWizard?说起Wizard(向导),大家应该不会感到陌生,因为Windows 9x提供了很多向导来帮助用户完成一些特定的任务。向导可以把复杂的任务分解成几个简单的步骤,并且逐步提示用户应该做些什么。AppWizard称为应用程序向导,是帮助我们生成应用程序框架源代码的一种特殊的向导。它允许我们作一系列的选择,并在此基础上自动生成VC源程序代码,这些代码构成了一个应用程序的框架。由于AppWizard生成的框架已经是一个完整的可以运行的程序,我们只需要在这个基础上进行修改并添加新的功能,从而在很大程度上减轻了编程的工作量。因此,多数用VC开发的软件都是从AppWizard生成的程序框架开始编写的。不过,虽说AppWizard带来了很大方便,但初学者往往对它生成的程序框架感到难以理解。这是很正常的,因为这个程序框架已经包含了很多涉及到MFC类库的原理和结构方面的知识,需要我们在编程过程中不断地学习和积累。图5-1:选择AppWizard以创建新的工程VC支持多种AppWizard,从File菜单中选择New命令,就会弹出如图5-1所示的对话框。在Projects一页中列出多种类型的工程,其中有三种工程有AppWizard,其它一些工程有相应的向导。其实,这里列出来的AppWizard和向导都是一些特殊的动态链接库,它们存放在VS98的“Program FilesMicrosoft Visual StudioCommonMSDev98BinIde”目录下,文件的扩展名为“.awx”。这些特殊的动态链接库可以用VC来编写,图5-1中的“Custom AppWizard”便是专门用来编写AppWizard的工程类型。心铃还从来没有编过AppWizard,有兴趣的朋友不妨试试。在所有的工程类型中,“MFC AppWizard(exe)”和“MFC AppWizard(dll)”最为常用,它们分别用于生成MFC应用程序和MFC动态链接库;“Win32 Application”和“Win32 Dynamic-Link Library”用于编写完全不借助MFC类库等工具的WIN32应用程序及动态链接库;“Win32 Console Application”特别值得一提,它用于编写WIN32控制台应用程序,这种类型的WIN32程序运行在一个DOS窗口中,其源程序遵从标准C/C+语言的规定,以main()函数作为程序的入口,可以调用printf()这样的标准C/C+输入输出函数。以前曾在DOS下学习过Turbo C/C+、Borland C+的朋友可以运用自己的知识迅速编写一个控制台应用程序,而不一定需要具备很多的Windows编程知识。控制台应用程序并不是DOS程序,它是真正的WIN32程序,可以调用WIN32函数。因此,如果你在学习VC过程中对某些API函数不清楚,完全可以建立一个控制台应用程序,在其中做实验,看看某个API函数应该怎样使用,效果如何等等;“MFC ActiveX ControlWizard”和“ATL COM AppWizard”也是常见的工程类型,它们一个用于编写ActiveX控件,一个利用ATL库来编写COM对象,当然,这两种工程涉及到的知识就要深奥一些了,我们的讲座中不会讨论它,但希望朋友们将来能进行这方面的开发工作。好了,现在我们选择“MFC AppWizard(exe)”工程类型,给工程取名为Schedule,按下OK按钮,便可以启动MFC AppWizard。使用MFC AppWizard图5-2:第一步利用MFC AppWizard生成程序框架需要进行几个步骤的选择。第一步如图5-2所示,其中有三种类型的程序可供选择:“Single document”是单文档应用程序(SDI),这种程序在同一时刻只能打开一个文档,例如Windows自带的记事本和写字板;“Multiple documents”是多文档应用程序(MDI),这种程序在同一时刻可以打开多个文档,每个文档显示在一个子窗口中,例如Word 97;“Dialog based”是基于对话框的应用程序,这种程序的主界面是一个对话框,通常用来完成一些比较简单的任务,例如Windows的字符映射表程序,另外,VB生成的基于Form的普通程序与VC中基于对话框的程序也有很多相似之处。在开始编写一个程序之前,我们应根据该程序的目的、特点来确定选择何种类型。日程安排程序不需要新建任何文档,只需处理一个特定的数据文件,因此我们选择单文档类型。在程序类型下面有一个复选框“Document/View architecture support”,即是否支持文档/视结构,缺省为支持。生成的程序将拥有文档类(先理解成负责读写和管理文件的类吧),可以新建或打开文档,并且在MFC类库的帮助下,文档类与视类(先理解成负责显示输出的类吧)之间存在着紧密的联系。如果选择不支持,那么生成的程序要简单一些,其中没有文档类。原则上来说,日程安排程序不处理其它任何文件,可以选择不支持文档/视结构,但为了与大多数MFC应用程序保持一致,心铃决定选择支持文档/视结构。在选择资源的语种时,只要没有什么特殊原因,我们一般都选中文资源,毕竟我们是在中文平台上开发程序嘛。图5-3:第二步第一步选择好后,我们按下Next按钮进入第二步,如图5-3所示。单文档程序和多文档程序都有六个步骤,而基于对话框的程序只有四个步骤,在每一步中,我们都可以按Back按钮回到上一步中,也可以直接按下了Finish按钮,接受后面几个步骤的缺省值。图5-4:第三步第二步选择为该程序添加何种级别的数据库支持,由于日程安排程序不涉及数据库操作,因此我们选择“None”。如果你的程序想要访问数据库,但不想从CFormView类来派生视类,应选择第二项“Header files only”。如果程序要使用从CFormView类派生出来的视类,但不需要存取文档,应选择第三项“Database view without file support”。如果程序还要存取文档,那么应选择第四项“Database view with file support”。选择了第三项或第四项后,我们还要选择相应的数据源(Data Source),那么什么是数据源呢?嘿嘿,心铃不再往下介绍了,学习VC有个特点,即使是最基本的工具也可能会涉及到不少较深的知识,如果我们遇到了一些不明白,但不影响现在工作的问题,不如先直接跳过去,以后需要用到的时候再来一鼓作气地攻下这些难点。Next按钮再次把我们带到如图5-4所示的第三步。这一步的选项比较多,都是关于OLE方面的问题。如果程序不支持复合文档的话,那么应选“None”。复合文档是OLE的一项技术,举个简单的例子,Word文档就是一种复合文档,除了普通的文字内容外,其中还可以存放表格、图片、声音等各种对象,甚至包括程序代码(就是宏啦)。复合文档的使用方法比较复杂,日程安排程序不会用到它,因此我们选择“None”。“Automation”是指OLE自动化,也是OLE的一项技术,如果程序要调用其它OLE自动化程序,或者自己提供自动化接口给别的程序使用,那么应选中该项。如果程序中要使用ActiveX控件,那么应选中“
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!