第1章VC软件开发基础_第1页
第1章VC软件开发基础_第2页
第1章VC软件开发基础_第3页
第1章VC软件开发基础_第4页
第1章VC软件开发基础_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章VC软件开发基础,1.2VC使用基础,1.1VC概述,1.3MFC类库简介,1.4VC的消息管理,目标:用VC开发Windows应用程序,1.1VC概述,微软公司的VisualC+因其强大的功能、非常友好的界面而成为当前最为热门的开发开发工具。VC提供的集成开发环境、MFC类库和应用程序框架极大地便利了开发Windows应用程序所需的用户界面设计、消息映射、源代码编写、编译链接和调试运行等工作。,用VC可以开发各种类型的应用程序:文字编辑、图形绘制、图像处理、数据库应用、ActiveX控件、动态链接库、网络通信、Internet应用、多媒体、游戏等程序。,1.1.1C、C+与VC的关系,C语言是结构化的高级语言,C+是在C的基础上扩展了面向对象编程的语言,而VC则是在C+的基础上增加了Windows程序的图形用户界面(GUI)和消息/事件驱动。三者的关系如下图所示。,1.1.2Windows应用程序基本特征,窗口是应用程序与用户之间的主要交互操作界面,它以图形化方式接收用户的输入,并把程序的运行结果以图形化的方式显示给用户。,图形用户界面:窗口和对话框,对话框是一种临时性的弹出式窗口,用于显示信息或从用户那里获得所需的信息。,窗口和对话框都有边框、标题条和关闭按钮,但窗口一般还有菜单栏、工具栏、状态栏和控制菜单。窗口中的大片区域是工作区,用于显示用户所打开的文件的内容。,对话框中的大片区域一般是由各式各样的控件占据着,如标签、文本框、命令按钮、核准框、单选钮、列表框、进展条等。,消息/事件驱动,Windows应用程序的运行系依靠外部发生的消息/事件来驱动,程序不断地等待任何可能的输入,然后做判断,再做适当的处理。,用户对应用程序的用户界面(如菜单、工具栏、对话框)的操作(如鼠标的点击和键盘的按键)就叫消息/事件。,对消息/事件作出响应的方法(函数)就叫消息/事件处理方法。,连接消息/事件与消息/事件处理方法的动作叫做消息/事件映射。,1.1.3Windows编程特点,基于上述的Windows程序的图形用户界面和消息/事件驱动两大特征,用VC开发的Windows程序分为“UI资源”和“程序代码”两大部分。,“UI资源”就是图形用户界面,在VC中主要通过资源编辑器来设计;“程序代码”就是能够对消息/事件做出反应的代码,在VC中主要通过ClassWizard来进行消息/事件的处理。,1.2VC使用基础,1.2.1VC集成开发环境和开发工具,1VisualC+6.0开发环境包括文本编辑器、资源编辑器、项目管理器、优化编译器、增量连接器和集成调试器等。,2VisualC+6.0开发工具包括AppWizard应用程序向导、ClassWizard类向导、ActiveX控件向导等。,1.2.2操作界面,1.2.3项目和工作区,1.项目在VC中,开发一个Windows应用程序是指生成一个项目,该项目包含着一组相关的文件,如各种头文件(.H)、实现文件(.CPP)、资源文件(.RC)、图标文件(.ICO)、位图文件(.BMP)等,而该项目必须在一个工作区中打开。,所以,当第一次建立一个应用程序时,应选择新建一个项目,此时VisualC+自动建立一个工作区,并把新建的项目在该工作区中打开;以后只要打开该工作区即可打开该项目。,2.项目类型在VC中进行编程开发,可以生成各种所需的项目,如exe、dll、ActiveX控件、ATL项目、数据库等。如下图。,3.工作区VC以工作区的方式来组织文件、项目和项目配置。首次创建工作区时,将创建一个工作区文件(.dsw)、一个项目文件(.dsp)、一个智能感知数据库(.ncb)和用户选项文件(.opt)。,每个项目由一组项目配置和一组源文件组成。创建或者打开工作区时,VC将在工作区管理器窗口中显示与项目有关的文件。工作区管理器一般包含三个选项卡:类视图(ClassView)、资源视图(ResourceView)和文件视图(FileView)。,1.2.4资源编辑器,资源编辑器是VisualC+6.0开发环境中的一个重要可视化开发工具,绝大多数Windows应用程序的可视化界面元素都可以利用资源编辑器生成。,Windows资源包括菜单、加速键、图标、光标、位图、对话框、工具栏等,通过资源编辑器,可以打开资源文件(res文件),并能对资源文件里面的资源进行编辑。,在VisualC+6.0中,源代码和资源编辑器为了应用资源和用户自定义的其他对象,引入了一种与资源一一对应的符号(资源符号),从而使资源能够以字符串的方式被引用。,资源符号是映像到某个整数值上的一字符串,即标识符。每当创建一个新的资源时,系统就会为其提供一个默认的资源符号名称并赋予一个整数值。,1.3MFC类库简介,1.3.1MFCC+类库简介,MFC类库由两大部分组成:一是通常所说的C+类库,是MFC类库的主体部分,这些类构成了MFC应用程序框架。二是MFC预定义宏、全局变量和全局函数,是MFC类库的辅助部分。它们都是用MFC进行Windows应用程序开发的不可缺少的组成部分。,MFC的C+类库可分为两类:CObject类派生的类和非CObject类派生的类。可细分为:,1.根类CObject类是大多数MFC类的最终基类,它们都继承了CObject类的三个主要特性:(1)在运行时识别对象所属的类。(2)支持串行化,把对象存入文件中以及从文件中读取对象。(3)在运行时打印诊断信息。,2.命令目标类命令目标类CCmdTarget封装了用户通过选择菜单或工具栏按钮向应用程序发送命令的界面,封装了MFC消息映射机制,支持命令和消息的自动发送,保证命令和消息正确发送到目的地。,3.线程和应用程序类MFC支持多线程。所有的应用程序至少有一个主线程,它是由CWinApp的对象使用。每个应用程序都有一个且只有一个CWinApp类或其派生类的全局对象,它控制程序运行的开始和结束。多线程的其他线程由CWinThread类或其派生类提供。,4.窗口类窗口类包括边框窗口类、视图类、对话框类、控件类、控件栏类和属性簿类,这些类的共同之处是都在屏幕上显示出一个图形用户界面,都封装了一个窗口句柄HWND,都是从CWnd类派生的。,5.图形输出类在Windows环境下,所有图形输出都是在设备描述表上进行。图形输出类封装了设备描述表和绘图工具,用来支持各种图形设备环境。,6.简单值类定义了一些常用的数据类型,包括CPoint、CSize、CRect、CString、CTime。,7.集合类包括链表类、数组类、映射类,用于数据保存。,8.文档和文件类所有涉及文件存取的类,包括文档类、文档模版类、档案类和用于磁盘文件、内存文件、流式文件、OLE数据流和Internet文件的输入输出类。,9.数据库类包括ODBC数据库类和DAO数据库类,用于生成支持数据库的应用程序。10.OLE支持类包括OLE容器类、OLE服务器类等,用于生成支持OLE的应用程序。11.Internet和网络类包括ISAPI类、Sockets类、Internet类。,12.线程同步类包括同步对象类和同步锁类,用于多线程中对资源的并发控制。13.异常类包括各种异常类,用于捕获和处理内存、文件、资源等异常。,1.3.2预定义宏、全局变量和全局函数,.数据类型:MFC用typedef预定义了下列数据类型:BYTE、WORD、DWORD、BOOL、COLORREF、LPCSTR、LPSTR等,在VC编程中经常会使用到。,.全局变量和全局函数:MFC以afx为前缀定义了一些全局变量和全局函数,以便在程序的任何位置使用这些全局变量和全局函数。,3.预定义宏:MFC预定义宏主要包括消息映射宏和运行时对象模型服务宏,分别用于支持消息映射和运行时对象模型服务,如对象动态创建和串行化等。,1.4VC的消息管理,所有Windows应用程序都是消息/事件驱动的,消息/事件处理是所有Windows应用程序的核心部分。当用户单击鼠标键盘或改变窗口大小时,都将给适当的窗口发送消息。而当用户单击菜单项、工具栏按钮或按下加速键或操作对话框的控件时,都将产生一定的事件。,VC从7.0(.Net)版本开始,将消息(Message)和事件(Event)分开。事件可分为两种类型:控件事件和命令事件。但VC6.0统称为消息。,1.4.1消息和事件的概念,1.命令消息/事件命令消息/事件是指用户单击菜单项、工具栏按钮或按下加速键而产生的消息/事件。通常每个菜单项都有一个命令ID,工具栏按钮和加速键就是通过这个命令ID与菜单项联系起来。,例如,“Edit”菜单中的“Copy”命令就可以用ID_EDIT_COPY来命名。MFC类库预定义了某些命令ID(如ID_EDIT_PASTE或ID_FILE_OPEN等),而其他命令ID则要编程人员自己定义。,2Windows消息消息主要指由用户操作各种窗口而向应用程序发出的信息,也包括操作系统内部产生的消息。例如,单击鼠标左按钮将产生WM_LBUTTONDOWN消息,而释放鼠标左按钮将产生WM_LBUTTONUP消息,按下键盘上的字母键,将产生WM_CHAR消息。,所有Windows消息都以“WM_”为前缀的后跟大写的单词或字母字符串。如WM_CHAR、WM_CREATE、WM_HSCROLL、WM_PAINT、WM_SIZE、WM_TIMER等。只有从CWnd派生的类才有Windows消息。,3控件消息/事件控件消息/事件是指用户对控件进行操作,控件对其所做的反应。例如,当用户改变编辑控件中的文本时,编辑控件将发送给父窗口(如对话框)一个EN_CHANGE控件消息/事件。,不同的控件所具有的消息/事件个数是不同的,例如,按钮类控件只有BN_CLICKED和BN_DOUBLECLICKED消息/事件,而编辑控件具有EN_CHANGE等8个消息/事件。消息/事件的前缀(前两个字母)一般代表控件的类型,如BN代表按钮类控件,EN代表编辑类控件。,一般把Windows消息和控件消息/事件合称为非命令消息。,1.4.2消息处理,在MFC中,消息处理由消息处理函数负责完成的,每个专门的处理函数单独处理每个消息。消息的处理函数通常是某一类的成员函数,编写消息的处理函数是Windows应用程序设计的主要任务。,1命令消息的处理函数,命令消息是由CCmdTarget的派生类对象(如文档、应用程序、窗口和视图等)处理的。Windows把命令发送给多个候选对象,称为命令目标链,通常其中的一个对象有针对该命令的处理函数。,由于菜单等用户界面对象是由用户定义的,每个应用程序的用户界面对象千差万别,所以来自用户界面对象的命令消息没有缺省的处理函数。如果某条命令直接影响某个特定的对象,则应该让该对象来处理这条命令。,把命令消息映射成处理函数时,以命令ID来命名处理函数,可以接受、修改或替换推荐使用的名字。例如,“Edit”菜单的“Cut”命令,其命令ID被预定义成ID_EDIT_CUT,处理函数被命名为:afx_msgvoidOnEditCut();命令消息的处理函数没有参数,也不返回值。,例如,消息WM_PAINT的处理函数在CWnd中被声明为:afx_msgvoidOnPaint();而事件EN_CHANGE的处理函数在CWnd中被声明成:afx_msgvoidOnChangeWidth();,2非命令消息的处理函数,Windows消息和控件消息都是由派生于CWnd的窗口类对象处理的。它们包括CFrameWnd、CMDIFrameWnd、CMDIChildWnd、CView、CDialog以及从这些类派生的用户自定义的类。,Windows消息和控件消息都有缺省的处理函数,这些函数在CWnd类中进行了预定义。MFC类库以消息名为基础形成这些处理函数的名称,都以前缀“On”开始。有的处理函数不带参数,而有的则有几个参数。CWnd中消息的处理函数的说明都有afx_msg前缀。,Windows消息由窗口、视图或对话框处理。,控件消息一般由表单窗口和对话框处理。但是,如果用户单击按钮控件时发出的BN_CLICKED控件消息将作为命令消息来处理。,1.4.3消息映射,可以接收消息的所有框架类都有自己的消息映射。框架利用消息映射把消息与它们的处理函数链接起来。,从CCmdTarget类派生的任何类都可以有命令消息映射,从CWnd类派生的任何类都可以有非命令消息映射。,用MFC应用程序向导创建应用程序框架时,应用程序向导为创建的每个命令目标类编写一个消息映射。每个命令目标类的消息映射存放在相应的.CPP文件中。,例如,对于应用程序类,MFC应用程序向导创建的基本消息映射为:BEGIN_MESSAGE_MAP(CHelloApp,CWinApp)ON_COMMAND(ID_APP_ABOUT,OnAppAbout)END_MESSAGE_MAP(),消息映射由一组宏组成,称为映射宏。其中,BEGIN_MESSAGE_MAP和END_MESSAGE_MAP用于将消息映射括起来,其他宏则包含有消息映射的内容。宏的格式依消息类型而定,如本例中的ON_COMMAND宏为处理命令消息的宏。宏内部的两个参数即为消息和消息处理函数。,1.4.4消息传递,多数消息都是用户与应用程序的相互作用而产生的。当产生消息时,CWinApp的成员函数Run用于检索消息,并将消息发送给适当的窗口。,所有消息的最初接收者肯定是一个窗口

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论