应用程序概述.doc

上传人:飞****2 文档编号:60225441 上传时间:2022-11-15 格式:DOC 页数:11 大小:2.78MB
返回 下载 相关 举报
应用程序概述.doc_第1页
第1页 / 共11页
应用程序概述.doc_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《应用程序概述.doc》由会员分享,可在线阅读,更多相关《应用程序概述.doc(11页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第 2 章 MFC应用程序概述 2.1 Windows应用程序概述 2.2 MFC应用程序框架 2.2.1 创建MFC应用程序 2.2.3 MFC单文档程序组成 2.3 消息映射与消息处理 2.3.1 消息类别 1.2.2 类向导 2.5 应用实例1 Windows窗口具有哪些应用特点?2 说明什么是消息?消息结构?消息队列?消息循环?消息映射?事件驱动程序?3 消息的基本分类是什么?4 如何创建单文档类型程序?5 说明单文档程序创建时所生成的代码?6 说明什么是应用程序类、框架窗口类、视图类、文档类?7 在MFC程序中,消息由什么对象接收?8 创建消息映射如何操作?操作结果是什么?2.1 W

2、indows应用程序概述2.1.1 窗口Windows应用程序运行于Windows操作系统上,与DOS应用程序有着本质的区别。所有的Windows应用程序都是由消息驱动的,消息处理是所有Windows应用程序的核心。窗口是用户界面中最重要的部分。它是屏幕上与一个应用程序相对应的矩形区域,是用户与产生该窗口的应用程序之间的可视界面。窗口的应用特点:(1)窗口为用户提供了图形方式的操作界面,Windows程序通过窗口完成输入输出工作。(2)窗口能够接收外部消息,从而能够感知系统或用户的动作。编写窗口程序的方法(1)直接调用WinAPI函数(2)使用MFC类创建窗口对象(3)使用MFC应用资源模板创

3、建基于窗口的程序(本课程)无论采用什么方法,消息处理都是编程的核心问题2.1.2 消息和事件Windows消息系统原理类似于“手机短信”。什么是消息?消息是一组有固定格式的数据,用于在“系统”、“进程”、“窗口”之间传递信息,通知某个事件的产生。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。(1)消息在“系统”、“进程”、“窗口”之间相互传递。 (2)Windows消息包括6个数据项,封装为一个结构,称为消息结构:typedef struct tagMSG HWND hwnd; /窗口句柄,即传送目的 UINT message; /消息编号,常量标

4、识符 WPARAM wParam;/ 32位消息的特定附加信息 LPARAM lParam; / 32位消息的特定附加信息 DWORD time; /消息创建时的时间 POINT pt; /消息创建时的鼠标位置MSG;(3)解释messagemessage即信息的具体内容,是长整型(32bit)。每个message都代表一件事情,一种情况,由windows系统进行规定。Windows规定了01024的具体含义,例如:WM_MOVE = $0003 /移动一个窗口WM_KEYDOWN = $0100 /按下一个键WM_LBUTTONDOWN= $0201 /按下鼠标左键WM_QUERYENDSE

5、SSION= $0011 /关机 消息传输过程消息队列:Windows为每个程序建立了一个表格,存放属于该程序的消息。称为消息队列。消息由系统分到各程序的消息队列,由程序自己取走。程序收到消息后如何做,是编程者的事情。消息循环模型Windows中的应用程序内部,都存在一个循环代码段,负责反复地检查消息队列,识别收到的消息,调用映射函数。在MFC模板程序中,消息循环由窗口内部函数自动处理。消息映射消息映射是应用程序中,消息与函数的一一对应关系。应用程序为了响应、处理消息,必须有与某个消息对应的函数,称为消息映射函数。当程序接收到该消息时,由消息循环调用映射函数,响应消息,从而使程序的运行与用户操

6、作一致。事件驱动程序模型消息机制使得windows程序称为事件驱动模式,即程序处于等待状态,根据用户的操作(事件),决定执行哪项功能。与结构化程序是不同的。2.1.3 基本数据类型Windows编程中常用的基本数据类型的别名。2.1.4 句柄句柄是Windows编程的基础,所谓句柄就是Windows使用的一种无重复整数。句柄主要用来标识应用程序中的一个对象,如窗口、实例、菜单、内存、输出设备、控制或文件等。2.2 MFC应用程序框架2.2.1 创建MFC应用程序框架 编写一个SDI单文档应用程序Li2_1,程序运行后,通过消息框输出“这是一个单文档应用程序!”的提示信息。(1) 选择File菜

7、单下的New菜单项,系统弹出New对话框。 (2) MFC AppWizard-Step 1对话框主要用于选择应用程序类型。AppWizard可以创建3种类型的应用程序框架。(3)MFC AppWizard-Step 2 of 6对话框中主要用于选择应用程序所支持数据库方式。后面的步骤可以略,直接按结束按钮(Finish)(8)打开项目工作区中的ClassView类视图,单击CLi2_1View类左边的“+”展开视图类,双击打开OnDraw()函数,并添加代码。void CLi2_1View:OnDraw(CDC* pDC)CLi2_1Doc* pDoc = GetDocument();ASS

8、ERT_VALID(pDoc);/ TODO: add draw code for native data hereMessageBox(这是一个单文档应用程序!,消息框, MB_ICONEXCLAMATION|MB_OKCANCEL);(9) 选择Build菜单中的Build Li2_1.exe菜单项,对工程进行编译和链接,生成可执行文件。再选择Build菜单中的Execute Li2_1.exe菜单命令运行程序。特点:在使用向导建立程序时,向导预先生成了部分代码,这些代码建立了程序的基本框架。我们接下来要做的是,爱框架中加入自己的代码,实现所需要的功能。需要3方面的知识:(1)能概略地阅读

9、生成的程序,理解基本框架的组成(2)编写程序的基本C+语法知识(3)MFC类库的常用“类”和“函数”,如CString类。2.2.2 MFC应用程序框架结构类什么是MFC?为VC+编程环境所提供的类库,主要是对WinAPI进行重新封装。总共大约160个类。简单地说,每个MFC类都包括了一些函数,函数放到类中,符合C+编程方法。这些函数,必须通过类定义对象才能使用。一个MFC应用程序并不直接操作上述类,而是以上述类为基类派生新的类,从而构建Windows应用程序的基本框架。例如,应用程序Li2_1中的类与这些基类的派生关系:2.2.3 MFC应用程序分析(单文档模板)1. 单文档程序结构分析假设

10、工程名为X,包括4个类:CXApp (应用程序类,代码文件XApp.h,XApp.cpp)主要成员函数 构造函数; InitInstance() 自动执行CXDoc(文档类,代码文件XDoc.h,XDoc.cpp)主要成员函数 构造函数; NewDocment() 创建时自动执行CFrameWnd(框架窗口类,代码文件MainFrm.cpp.h,MainFrm.cpp.cpp)主要成员函数 构造函数; OnCreate() 创建时自动执行CXView(视图类,代码文件XView.h,XView.cpp)主要成员函数 构造函数; UpdateInitial() 创建时自动执行 OnDraw()

11、刷新时自动执行程序启动执行流程1)执行 CXApp theApp;2)执行应用程序对象的构造函数3)执行应用程序对象的InitInstance(),在其中创建 框架窗口对象;文档对象;视图对象4)执行文档对象的构造函数,和OnNewDocment()5)执行框架窗口对象的构造函数,和OnCreate()6)执行视图窗口对象的构造函数,和UpdateInitial()7)执行视图窗口对象的OnDraw()8)等待消息,当有消息到达时执行对应的消息映射函数。2. 在单文档程序中进行编程的方法(1) 基本思路 1)设计程序界面,从用户出发,确定用户操作所对应的功能; 2)在类向导中生成用户事件对应的

12、消息映射函数; 3)进入所生成的函数,编写实现功能的代码(C+语言)(2)类向导使用方法 利用ClassWizard可以为它建立新类、进行消息映射、增加类的成员变量、修改已存在的成员函数和成员变量等。类向导窗口的使用方法:Ctrl+w 打开,Class Name 选择存放映射函数的类Object 选择发生事件的对象,可以是菜单、控件等Messages 选择消息,双击消息可以产生函数。Member Function 消息响应函数,双击函数进入代码窗口。Class Name 选择类,将生成的映射函数类放到这个类。Object 该类中能够响应消息的对象(成员),包括菜单、控件等Messages 选择

13、消息,双击消息可以产生函数。Member Function 消息响应函数,双击函数进入代码窗口。一旦函数被产生,就可以进入源代码文件去编写它。此函数将在收到系统消息时自动执行。消息对话框 一种简单的对话框,用户可以直接调用消息对话框函数来使用它,而不需要自己创建。这里介绍2个:MessageBox(LPCTSTR lpText);函数参数为字符串类型,功能是在弹出窗口中显示字符串。来源:CWnd类。AfxMessageBox(LPCTSTR lpText);函数参数为字符串类型,功能是在弹出窗口中显示字符串。来源:MFC全局函数。2.3 消息映射与消息处理 2.3.1 消息的类别及其描述 Wi

14、ndows消息主要有3种类型:标准Windows消息、控件消息和命令消息。1标准Windows消息(鼠标消息、键盘消息、窗口消息)除WM_COMMAND以外,所有以“WM_”为前缀的消息都是标准Windows消息;由窗口类或视图类处理;标准的Windows消息又分为3类:键盘消息、鼠标消息和窗口消息。(1) 键盘消息键盘消息与键盘某个键的动作相关联。常见的键盘消息有以下几种。WM_KEYDOWN、WM_KEYUP:按下、释放非系统键产生的消息。WM_CHAR:输入非系统字符时产生的消息。(2) 鼠标消息 鼠标消息涉及到鼠标的单击、双击、拖动等。常用的鼠标消息有以下几种。 WM_MOUSEMOV

15、E:鼠标移动时产生的消息。 WM_RBUTTONDOWN:鼠标右键按下时产生的消息。 WM_LBUTTONDOWN:鼠标左键按下时产生的消息。 WM_LBUTTONDBLCLICK:鼠标双击时产生的消息。(3) 窗口消息窗口消息一般与创建窗口、绘制窗口、移动窗口和销毁窗口等动作有关。在MFC应用程序中,窗口消息是由视图类、窗口类及它们的派生类处理的。2. 控件消息控件消息是指控件或其他子窗口向父窗口发送的WM_COMMAND消息。与其他标准的Windows消息一样,控件消息也应该在视图类、窗口类中进行处理。但是,如果用户单击按钮控件时,发出的控件通知消息BN_CLICKED将作为命令消息来处理

16、。3. 命令消息命令消息是由菜单项、工具栏按钮、快捷键等用户界面对象发出的WM_COMMAND消息。命令消息与其他消息不同,它可被更广泛的对象如文档、文档模板、应用程序对象、窗口和视图等处理。【例2.2】 利用ClassWizard为例2.1中生成的应用程序Li2_1添加鼠标右键按下消息,即WM_RBUTTONDOWN消息,并为File菜单下的Open菜单项添加消息处理函数,分析ClassWizard类向导所进行的消息映射。2.3.2 类向导使用方法利用ClassWizard可以为它建立新类、进行消息映射、增加类的成员变量、修改已存在的成员函数和成员变量等。类向导窗口的使用方法:Ctrl+w

17、打开类向导窗口,也可以通过VC主菜单打开。Class Name 选择存放映射函数的类Object 选择发生事件的对象,可以是菜单、控件等Messages 选择消息,双击消息可以产生函数。Member Function 消息响应函数,双击函数进入代码窗口。Class Name 选择类,将生成的映射函数类放到这个类。Object 该类中能够响应消息的对象(成员),包括菜单、控件等Messages 选择消息,双击消息可以产生函数。Member Function 消息响应函数,双击函数进入代码窗口。一旦函数被产生,就可以进入源代码文件去编写它。此函数将在收到系统消息时自动执行。2.5 应用实例功能:编

18、写一个单文档应用程序Sy2,程序运行后,首先在视图窗口中输入文本,然后通过键盘上的光标键控制该文本向左、向右、向上和向下4个方向移动。编程步骤:新建单文档程序Sy2找到视图类CSy2View声明部分,为视图类增加成员变量int x,y; /输出位置CString m_string; /接收的字符串找到视图类构造函数,为变量赋初值x=50,y=50;m_string=;打开类向导,为视图窗口增加2个消息映射 (1)Class 选视图类CSy2View(2)Object选视图类CSy2View,表示事件发生在视图窗口上(3)Message分别选WM_CHAR和WM_ONKEYDOWN,生成映射函数

19、进入WM_CHAR的映射函数写代码m_string += nChar;Invalidate();进入WM_KEYDOWN的映射函数写代码switch(nChar)case VK_LEFT:x-;break;case VK_RIGHT:x+;break;case VK_UP:y-;break;case VK_DOWN:y+;break; Invalidate();进入OnDraw函数写代码pDC-TextOut(x,y,m_string);调试运行分析:本程序使用了3个消息映射,其中刷新消息映射OnDraw()是建立程序时所生成的。已有的本程序将变量和函数(消息映射函数)都放到了视图类中,使得互相访问简化。Invalidate()功能是刷新视图窗口,相当于间接调用OnDraw本例学习要点是如何建立消息映射函数

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com