面向对象程序设计语言.pptx
《面向对象程序设计语言.pptx》由会员分享,可在线阅读,更多相关《面向对象程序设计语言.pptx(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、14.1 Windows应用程序的特点与消息驱动机制基于Windows操作系统的应用程序的特点是:标准的图形用户界面,比如窗口、菜单、按钮、列表框等;应用程序与硬件无关的特性,对于同一类硬件,不论厂家、型号,程序都无需进行任何修改就可以运行;所有的Windows应用程序都是消息驱动机制,也就是说Windows程序是通过操作系统发送的消息来处理用户的输入的。在进行Windows编程之前,必须了解Windows的运行机制。在Windows操作系统中,无论是系统产生的动作或是用户运行应用程序产生的动作都称为事件(Events)产生的消息(Message)。无论是Windows应用程序的设计、还是它的
2、应用,都是基于消息驱动方式的,这是Windows应用程序与传统的应第1页/共41页2用程序最大的区别。在传统的编程方式中,程序是主动的。程序主动执行,只有当需要用户通过键盘或鼠标输入信息时,才进行查询或等待。获得输入后,程序继续运行。而Windows应用程序是被动的,正常情况下,只是等待被消息触发。当用户点击鼠标或按下了键盘,则由操作系统将这些操作转化为特殊的消息,传递给应用程序,应用程序再用对应的消息处理过程进行处理,处理完毕后,继续等待下一个消息。消息驱动是Windows操作系统的一大特色,操作系统将包括用户输入在内的各种事件以消息的形式发送到目标,目标系统再根据消息的具体内容进行相应的处
3、理。4.1 Windows应用程序的特点与消息驱动机制第2页/共41页34.2 利用MFC Appwizard 创建Windows应用程序 在C+中,事物之间的关系是通过类的派生和类的成员函数的重载来反映的。而在Visual C+6.0中,类同样是最重要的元素。如一个字符串可以是类Cstring的对象,一个窗口可以是类CWnd的对象,一个对话框可以是类Cdialog的对象等等。Visual C+6.0中的MFC AppWizard(应用程序向导)可以使用户自动生成一些常用的标准程序结构和编程风格。例如一般的Windows应用程序结构、DLL应用程序结构、单文档(SDI)应用程序结构、多文档(M
4、DI)应用程序结构等。下面详细介绍利用MFC AppWizard创建一个Windows应用程序的步骤:第零步 启动Visual C+6.0,选择【File】菜单下的【New】菜单项,选择【Projects】标签,选择【MFC AppWizard(exe)】项目类型,在【Project name】中输入第3页/共41页4项目名MyExp,定位于“E:C+EXAMPLE”文件夹中,单击【OK】按钮。第一步 选择【Single document】应用类型,即单文档应用程序,其他使用默认值,单击【Next】按钮。第二步 让用户选择程序中是否加入数据库支持,在此使用默认值【None】,单击【Next】按
5、钮。第三步 让用户选择在程序中加入复合文档,自动化或ActiveX控件的支持,在此使用默认值,单击【Next】按钮。第四步 让用户选择应用程序的一些特性,在此使用默认值,单击【Next】按钮。第五步 让用户选择应用程序主窗口的风格、在源文件中是否加入注释、使用怎样的MFC类库,在此使用默认值,单击【Next】按钮。4.2 利用MFC Appwizard 创建Windows应用程序第4页/共41页5第六步 用户可以对MFC AppWizard提供的缺省类名、基类名、头文件名、源文件名进行修改,使用默认值,单击【Finish】按钮。则会显示出用户在前面几个步骤中作出的选择内容,单击【OK】按钮,系
6、统开始创建应用程序,并回到Visual C+6.0的主界面。运行过的应用程序MyExp可以脱离Visual C+6.0单 独 运 行,运 行 该 文 档 可 以 双 击“E:C+EXAMPLEDebug”下 的 MyExp.exe文件。和所有的Windows应用程序一样,MyExp也包含标题栏、菜单栏、工具栏、状态栏等窗口元素。4.2 利用MFC Appwizard 创建Windows应用程序第5页/共41页64.3 MFC应用程序的类和文件4.3.1 类说明 AppWiZard在生成应用程序时,共派生了5个类单击“MyExp classes”左侧的“+”展开所有的类,即可显示出应用程序MyE
7、xp的5个类,其中:CAboutDlg:关于About对话框的对话框类CMainFrame:主框架窗口类CMyExpApp:应用程序类CMyExpDoc:文档类CMyExpView:视图类 在 工 程 中,每 个 类 都 拥 有 自 己 的 类 定 义 文 件(*.H)和类实现文件(*.CPP)。类定义文件主要保存各种类的定义;类实现文件主要保存各种类的成员函数的实现代码。第6页/共41页7下面分别对这5个类进行说明:关于About对话框的对话框类CAboutDlg CAboutDlg是工程MyExp的对话框类,它是由MFC类库中的CDialog类派生而来的。主框架窗口类CMainFrame
8、CMainFrame是工程MyExp的主框架窗口类,它的基类是CFrameWnd。头文件为MainFrm.h,实现文件为MainFrm.cpp。主框架窗口类用于管理主程序的窗口,来显示窗口的标题栏、工具栏、状态栏等;同时还处理对窗口操作的消息,例如窗口最大化、最小化、改变窗口大小等一般操作。视图窗口是主框架窗口的子集,对于多文档界面(MDI)应用程序,主框架窗口是所有MDI子窗口的容器。4.3 MFC应用程序的类和文件第7页/共41页8 应用程序类CMyExpApp CMyExpApp是工程MyExp的应用程序类,它的基类是CWinApp。头文件为MyExp.h,实现文件为MyExp.cpp。
9、应用程序类管理程序的整体,控制应用程序的所有对象,包括文档、视图和边框窗口,并完成应用程序的初始化工作和程序退出时的清除工作。注意:每个基于MFC的应用程序都必须有一个从CWinApp类派生的对象。文档类CMyExpDoc CMyExpDoc是工程MyExp的文档类,它的基类是CDocument。头文件为MyExpDoc.h,实现文件为MyExpDoc.cpp。4.3 MFC应用程序的类和文件第8页/共41页9 文档类负责存放程序的数据并读取磁盘文件数据,或将磁盘文件数据写入磁盘文件中。文档类必须通过视图类实现与用户的交互。视图类CMyExpView CMyExpView是工程MyExp的视图
10、类,它的基类是CView。头文件为MyExpView.h,实现文件为MyExpView.cpp。视图类主要负责管理视图窗口,显示文档类中的数据,可以显示在屏幕上,也可以输出到打印机或其他设备上;也负责处理用户数据,接受用户对数据的鼠标、键盘操作并传送给文档类对象。4.3 MFC应用程序的类和文件第9页/共41页104.3 MFC应用程序的类和文件4.3.2 文件说明 App Wizard在自动生成工程时,除了生成上面介绍的各个类的头文件和实现文件外,还生成了一些为建立应用程序所需要的其他文件。这些文件可以在应用程序生成时指定的路径(E:C+EXAMPLEMyExp)中找到,下面分别对这些文件加
11、以说明:1.MyExp.clw:Class Wizard的信息存储文件,存储由Class Wizard编辑已有的类或添加新类的信息,存储由Class Wizard建立和编辑各种消息处理函数和映射变量等的信息。2.MyExp.dsp:Project文 件,即 工 程 文 件。Project文件中保存着工程的各种信息,一个工程文件对应一个工程应用程序。第10页/共41页113.MyExp.dsw:Workspace文件。一个Workspace文件可包含一个或多个工程。4.MyExp.rc:资源定义文件,包含程序资源的定义,其中保存了应用程序中使用到的各种资源的信息,包括存贮在文件夹中的图标、位图和
12、光标等。5.Resource.h:标准的头文件,它包含了所有资源符号的定义,与MyExp.rc文件相对应。6.StdAfx.h:包含在所有App Wizard程序中的标准头文件,它用于包含其他包含在预编译头文件中文件。7.StdAfx.cpp:包含在所有App Wizard程序中,它包含所有标准include文件。8.resMyExpDoc.ico:文件中包含了打开文档时所用的图标文件。4.3 MFC应用程序的类和文件第11页/共41页129.resMyExp.rc2:资源定义文件,包含了用vc不能直接编辑的资源。可以将所有不能由资源编辑器编辑的资源放置到这个文件中。10.resMyExp.i
13、co:应用程序的图标文件。应用程序图标包含在资源文件MyExp.rc中。11.resToolbar.bmp:用于创建工具栏按钮的位图文件。初始栏工具栏和状态栏是在主边框窗口类中构造的。12.ReadMe.txt:包含了对所有该程序的文件的解释信息,并说明了所有创建的类。另外,如果在App Wizard的第4步中选择了Context_sensitive Help选项,则App Wizard会自动生成一个.hpj文件和一些.rtf文件,它们用以给出上下文的帮助。4.3 MFC应用程序的类和文件第12页/共41页13 Windows 应 用 程 序 一 般 是 由 消 息 驱 动 的(message
14、-driven),这也是Windows编程方式与其他编程方式最大的不同之处。消息就是操作系统通知应用程序某件事情已经发生的一种方式。例如,当用户移动或双击鼠标、改变窗口大小等,都将向适当的窗口发送消息,一个窗口可以向另一个窗口发送消息,并且大多数窗口通过向其他窗口发送一个稍有不同的消息来响应消息。Windows系统中的消息主要有三种类型:标准的Windows消息、控件消息和命令消息。4.4 Windows消息第13页/共41页144.4 Windows消息4.4.1 标准的Windows消息 所 有 以 WM_为 前 缀 的 消 息 都 是 标 准 的Windows消息(WM_COMMAND消
15、息除外),如WM_PAINT、WM_QUIT等,这些消息通常含有用于确定如何对消息进行处理的一些参数。标准的Windows 消息一般由窗口对象和视图对象进行处理。窗口对象指的是从CWnd中派生出的类的对象,如从CWnd、CFrameWnd、CMDIFrameWnd、CMDIChildWnd、Cview、Cdialog等MFC类或这些类的派生类定义的对象(这些类都是CWnd类直接或间接派生的)。第14页/共41页154.4 Windows消息 标准的Windows消息可以分为三类,即键盘消息、鼠标消息和窗口消息。下面分别加以说明。键盘消息 当键盘的某个键被按下时,将产生WM_CHAR消息,这个消
16、息带有字符代码值、重复次数和先前状态码三个参数。WM_CHAR消息的处理函数为OnChar(),此函数的原型为:afx_msg void Onchar(UINT nChar,UINT nRepCnt,UINT nFlags);其中:nChar是所按键的字符代码值;nRepCnt是重复的次数,它表示用户按键时重复击键的次数;nFlags表示扫描码、先前键状态和键转换状态等,其参数值功能描述见表4.1所示。第15页/共41页164.4 Windows消息位含 义015指明键重复按下的次数1623指定扫描码,依赖于具体厂家的按键值24如果同时按下扩展键(如功能键Alt、Ctrl),则置为1,否则置为
17、02528由Windows内部使用29若同时按下了Alt键,则置为1,否则置为030指明先前键状态。若消息发出前键是按下的,则置为1,否则置为031指明键转换状态。若按键已松开,则置为1,否则置为0表4.1 nFlags参数值功能描述 第16页/共41页174.4 Windows消息鼠标消息 在Windows中处理鼠标的操作基本上有三种:1.单击(Click)2.双击(Double Click)3.拖动(Drag)所有这些鼠标的操作,都会产生相应的消息。鼠标移动时产生WM_MOUSEMOVE消息,鼠标左键按下时产生WM_LBUTTONDOWN消息,鼠标右键按下时产生WM_RBUTTONDOWN
18、消息,鼠标左键双击时产生WM_LBOTTONDBLCLK消息等等。所有这些鼠标消息的处理函数都有相似的原型,它们都有两个参数。我们以处理鼠标左键按下的消息函数OnLButtonDown()为例来进行说明。此函数的原型如下:afx_msg void OnLButtonDown(UINT nFlags,Cpoint point);其中:参数point是鼠标事件发生时鼠标光标所在的位置,它是相对于窗口左上角的水平坐标和垂直坐标而言的。第17页/共41页184.4 Windows消息参数nFlag指明鼠标按钮的状态以及鼠标事件发生时键盘上某些键的状态,每一状态都可以由nFlag的一位来表示。我们可以从
19、表4.2中所列的位屏蔽中得到每一位。4.2 nFlags参数每位的含义 其中,MK_CONTROL、MK_LBUTTON、MK_MBUTTON、MK_MBUTTON、MK_RBUTTON和MK_SHIFT都是预定义的宏。位屏蔽含 义MK_CONTROLCtrl键按下时设置MK_LBUTTON鼠标左键按下时设置MK_MBUTTON鼠标中间键按下时设置MK_RBUTTON鼠标右键按下时设置MK_SHIFTShift键按下时设置第18页/共41页194.4 Windows消息 窗口消息 所有窗口的变化,包括窗口内容重绘WM_PAINT、窗 口 最 大 化 WM_MAXIMIZE、窗 口 最 小 化W
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计语言
限制150内