




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 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 Windows应用程序概述2.1.1 窗口Windows应用程序运行于Windows操作系统上,与DOS应用程序有着本质的区别。所有的Windows应用程序都是由消息驱动的,消息处理是所有Windows应用程序的核心。窗口是用户界面中最重要的部分。它是屏幕上与一个应用程序相对应的矩形区域,是用户与产生该窗口的应用程序之间的可视界面。窗口的应用特点:(1)窗口为用户提供了图形方式的操作界面,Windows程序通过窗口完成输入输出工作。(2)窗口能够接收外部消息,从而能够感知系统或用户的动作。编写窗口程序的方法(1)直接调用WinAPI函数(2)使用MFC类创建窗口对象(3)使用MFC应用资源模板创建基于窗口的程序(本课程)无论采用什么方法,消息处理都是编程的核心问题2.1.2 消息和事件Windows消息系统原理类似于“手机短信”。什么是消息?消息是一组有固定格式的数据,用于在“系统”、“进程”、“窗口”之间传递信息,通知某个事件的产生。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。(1)消息在“系统”、“进程”、“窗口”之间相互传递。 (2)Windows消息包括6个数据项,封装为一个结构,称为消息结构:typedef struct tagMSG HWND hwnd; /窗口句柄,即传送目的 UINT message; /消息编号,常量标识符 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_QUERYENDSESSION= $0011 /关机 消息传输过程消息队列:Windows为每个程序建立了一个表格,存放属于该程序的消息。称为消息队列。消息由系统分到各程序的消息队列,由程序自己取走。程序收到消息后如何做,是编程者的事情。消息循环模型Windows中的应用程序内部,都存在一个循环代码段,负责反复地检查消息队列,识别收到的消息,调用映射函数。在MFC模板程序中,消息循环由窗口内部函数自动处理。消息映射消息映射是应用程序中,消息与函数的一一对应关系。应用程序为了响应、处理消息,必须有与某个消息对应的函数,称为消息映射函数。当程序接收到该消息时,由消息循环调用映射函数,响应消息,从而使程序的运行与用户操作一致。事件驱动程序模型消息机制使得windows程序称为事件驱动模式,即程序处于等待状态,根据用户的操作(事件),决定执行哪项功能。与结构化程序是不同的。2.1.3 基本数据类型Windows编程中常用的基本数据类型的别名。2.1.4 句柄句柄是Windows编程的基础,所谓句柄就是Windows使用的一种无重复整数。句柄主要用来标识应用程序中的一个对象,如窗口、实例、菜单、内存、输出设备、控制或文件等。2.2 MFC应用程序框架2.2.1 创建MFC应用程序框架 编写一个SDI单文档应用程序Li2_1,程序运行后,通过消息框输出“这是一个单文档应用程序!”的提示信息。(1) 选择File菜单下的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();ASSERT_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)能概略地阅读生成的程序,理解基本框架的组成(2)编写程序的基本C+语法知识(3)MFC类库的常用“类”和“函数”,如CString类。2.2.2 MFC应用程序框架结构类什么是MFC?为VC+编程环境所提供的类库,主要是对WinAPI进行重新封装。总共大约160个类。简单地说,每个MFC类都包括了一些函数,函数放到类中,符合C+编程方法。这些函数,必须通过类定义对象才能使用。一个MFC应用程序并不直接操作上述类,而是以上述类为基类派生新的类,从而构建Windows应用程序的基本框架。例如,应用程序Li2_1中的类与这些基类的派生关系:2.2.3 MFC应用程序分析(单文档模板)1. 单文档程序结构分析假设工程名为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() 刷新时自动执行程序启动执行流程1)执行 CXApp theApp;2)执行应用程序对象的构造函数3)执行应用程序对象的InitInstance(),在其中创建 框架窗口对象;文档对象;视图对象4)执行文档对象的构造函数,和OnNewDocment()5)执行框架窗口对象的构造函数,和OnCreate()6)执行视图窗口对象的构造函数,和UpdateInitial()7)执行视图窗口对象的OnDraw()8)等待消息,当有消息到达时执行对应的消息映射函数。2. 在单文档程序中进行编程的方法(1) 基本思路 1)设计程序界面,从用户出发,确定用户操作所对应的功能; 2)在类向导中生成用户事件对应的消息映射函数; 3)进入所生成的函数,编写实现功能的代码(C+语言)(2)类向导使用方法 利用ClassWizard可以为它建立新类、进行消息映射、增加类的成员变量、修改已存在的成员函数和成员变量等。类向导窗口的使用方法:Ctrl+w 打开,Class Name 选择存放映射函数的类Object 选择发生事件的对象,可以是菜单、控件等Messages 选择消息,双击消息可以产生函数。Member Function 消息响应函数,双击函数进入代码窗口。Class Name 选择类,将生成的映射函数类放到这个类。Object 该类中能够响应消息的对象(成员),包括菜单、控件等Messages 选择消息,双击消息可以产生函数。Member Function 消息响应函数,双击函数进入代码窗口。一旦函数被产生,就可以进入源代码文件去编写它。此函数将在收到系统消息时自动执行。消息对话框 一种简单的对话框,用户可以直接调用消息对话框函数来使用它,而不需要自己创建。这里介绍2个:MessageBox(LPCTSTR lpText);函数参数为字符串类型,功能是在弹出窗口中显示字符串。来源:CWnd类。AfxMessageBox(LPCTSTR lpText);函数参数为字符串类型,功能是在弹出窗口中显示字符串。来源:MFC全局函数。2.3 消息映射与消息处理 2.3.1 消息的类别及其描述 Windows消息主要有3种类型:标准Windows消息、控件消息和命令消息。1标准Windows消息(鼠标消息、键盘消息、窗口消息)除WM_COMMAND以外,所有以“WM_”为前缀的消息都是标准Windows消息;由窗口类或视图类处理;标准的Windows消息又分为3类:键盘消息、鼠标消息和窗口消息。(1) 键盘消息键盘消息与键盘某个键的动作相关联。常见的键盘消息有以下几种。WM_KEYDOWN、WM_KEYUP:按下、释放非系统键产生的消息。WM_CHAR:输入非系统字符时产生的消息。(2) 鼠标消息 鼠标消息涉及到鼠标的单击、双击、拖动等。常用的鼠标消息有以下几种。 WM_MOUSEMOVE:鼠标移动时产生的消息。 WM_RBUTTONDOWN:鼠标右键按下时产生的消息。 WM_LBUTTONDOWN:鼠标左键按下时产生的消息。 WM_LBUTTONDBLCLICK:鼠标双击时产生的消息。(3) 窗口消息窗口消息一般与创建窗口、绘制窗口、移动窗口和销毁窗口等动作有关。在MFC应用程序中,窗口消息是由视图类、窗口类及它们的派生类处理的。2. 控件消息控件消息是指控件或其他子窗口向父窗口发送的WM_COMMAND消息。与其他标准的Windows消息一样,控件消息也应该在视图类、窗口类中进行处理。但是,如果用户单击按钮控件时,发出的控件通知消息BN_CLICKED将作为命令消息来处理。3. 命令消息命令消息是由菜单项、工具栏按钮、快捷键等用户界面对象发出的WM_COMMAND消息。命令消息与其他消息不同,它可被更广泛的对象如文档、文档模板、应用程序对象、窗口和视图等处理。【例2.2】 利用ClassWizard为例2.1中生成的应用程序Li2_1添加鼠标右键按下消息,即WM_RBUTTONDOWN消息,并为File菜单下的Open菜单项添加消息处理函数,分析ClassWizard类向导所进行的消息映射。2.3.2 类向导使用方法利用ClassWizard可以为它建立新类、进行消息映射、增加类的成员变量、修改已存在的成员函数和成员变量等。类向导窗口的使用方法:Ctrl+w 打开类向导窗口,也可以通过VC主菜单打开。Class Name 选择存放映射函数的类Object 选择发生事件的对象,可以是菜单、控件等Messages 选择消息,双击消息可以产生函数。Member Function 消息响应函数,双击函数进入代码窗口。Class Name 选择类,将生成的映射函数类放到这个类。Object 该类中能够响应消息的对象(成员),包括菜单、控件等Messages 选择消息,双击消息可以产生函数。Member Function 消息响应函数,双击函数进入代码窗口。一旦函数被产生,就可以进入源代码文件去编写它。此函数将在收到系统消息时自动执行。2.5 应用实例功能:编写一个单文档应用程序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,生成映射函数进入WM_CHAR的映射函数写代码m_string += nChar;Invalidate();进入WM_KEYDOWN的映射函数写代码swi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年生态循环农业技术模式与经济效益互动关系实证分析报告
- 2026届四川广元天立学校高一化学第一学期期中统考模拟试题含解析
- 现代管理学课件升学教育
- 现代教育原理课件
- 2025年春季初级经济师职业资格考试 经济基础知识考前冲刺押题模拟试题试卷
- 吉林省通榆县第一中2026届化学高一上期末联考试题含解析
- 2025年注册会计师(CPA)考试 会计科目实战演练全真试卷
- 2025年注册会计师(CPA)考试 会计科目全真模拟试卷答案精讲版
- 2025年小学数学毕业升学考试易错题型深度解析模拟试卷
- 测量员的岗位职责
- GB/T 27043-2025合格评定能力验证提供者能力的通用要求
- 共青团员信息登记表(打印版)
- 监理内业资料整理要点
- GB/T 21652-2017铜及铜合金线材
- GB/T 12234-2019石油、天然气工业用螺柱连接阀盖的钢制闸阀
- 全套教学课件《公共艺术(音乐)》
- 高中数学《基于问题链的数学教学探索》课件
- (卓越绩效)质量奖申报材料
- 同创伟业投资分析报告(附358家被投企业介绍)
- 数学-四年级(上册)-人教版-《亿以上数的认识及读法》教学课件
- 政治经济学ppt课件汇总(完整版)
评论
0/150
提交评论