2MFC应用程序概述.docx

上传人:b****1 文档编号:2173807 上传时间:2023-05-02 格式:DOCX 页数:13 大小:112.74KB
下载 相关 举报
2MFC应用程序概述.docx_第1页
第1页 / 共13页
2MFC应用程序概述.docx_第2页
第2页 / 共13页
2MFC应用程序概述.docx_第3页
第3页 / 共13页
2MFC应用程序概述.docx_第4页
第4页 / 共13页
2MFC应用程序概述.docx_第5页
第5页 / 共13页
2MFC应用程序概述.docx_第6页
第6页 / 共13页
2MFC应用程序概述.docx_第7页
第7页 / 共13页
2MFC应用程序概述.docx_第8页
第8页 / 共13页
2MFC应用程序概述.docx_第9页
第9页 / 共13页
2MFC应用程序概述.docx_第10页
第10页 / 共13页
2MFC应用程序概述.docx_第11页
第11页 / 共13页
2MFC应用程序概述.docx_第12页
第12页 / 共13页
2MFC应用程序概述.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

2MFC应用程序概述.docx

《2MFC应用程序概述.docx》由会员分享,可在线阅读,更多相关《2MFC应用程序概述.docx(13页珍藏版)》请在冰点文库上搜索。

2MFC应用程序概述.docx

2MFC应用程序概述

第2章MFC应用程序概述

2.1Windows应用程序概述

2.2MFC应用程序框架

2.2.1创建MFC应用程序

2.2.3MFC单文档程序组成

2.3消息映射与消息处理

2.3.1消息类别

1.2.2类向导

2.5应用实例

1Windows窗口具有哪些应用特点?

2说明什么是消息?

消息结构?

消息队列?

消息循环?

消息映射?

事件驱动程序?

3消息的基本分类是什么?

4如何创建单文档类型程序?

5说明单文档程序创建时所生成的代码?

6说明什么是应用程序类、框架窗口类、视图类、文档类?

7在MFC程序中,消息由什么对象接收?

8创建消息映射如何操作?

操作结果是什么?

2.1Windows应用程序概述

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个数据项,封装为一个结构,称为消息结构:

typedefstructtagMSG

{

HWNDhwnd;//窗口句柄,即传送目的

UINTmessage;//消息编号,常量标识符

WPARAMwParam;//32位消息的特定附加信息

LPARAMlParam;//32位消息的特定附加信息

DWORDtime;//消息创建时的时间

POINTpt;//消息创建时的鼠标位置

}MSG;

(3)解释message

message即信息的具体内容,是长整型(32bit)。

每个message都代表一件事情,一种情况,由windows系统进行规定。

Windows规定了0~1024的具体含义,例如:

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.2MFC应用程序框架

2.2.1创建MFC应用程序框架

编写一个SDI单文档应用程序Li2_1,程序运行后,通过消息框输出“这是一个单文档应用程序!

”的提示信息。

(1)选择File菜单下的New菜单项,系统弹出New对话框。

(2)MFCAppWizard-Step1对话框主要用于选择应用程序类型。

AppWizard可以创建3种类型的应用程序框架。

(3)MFCAppWizard-Step2of6对话框中主要用于选择应用程序所支持数据库方式。

后面的步骤可以略,直接按结束按钮(Finish)

(8)打开项目工作区中的ClassView类视图,单击CLi2_1View类左边的“+”展开视图类,双击打开OnDraw()函数,并添加代码。

voidCLi2_1View:

:

OnDraw(CDC*pDC)

{

CLi2_1Doc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

//TODO:

adddrawcodefornativedatahere

MessageBox("这是一个单文档应用程序!

","消息框",MB_ICONEXCLAMATION|MB_OKCANCEL);

}

(9)选择Build菜单中的BuildLi2_1.exe菜单项,对工程进行编译和链接,生成可执行文件。

再选择Build菜单中的ExecuteLi2_1.exe菜单命令运行程序。

特点:

在使用向导建立程序时,向导预先生成了部分代码,这些代码建立了程序的基本框架。

我们接下来要做的是,爱框架中加入自己的代码,实现所需要的功能。

需要3方面的知识:

(1)能概略地阅读生成的程序,理解基本框架的组成

(2)编写程序的基本C++语法知识

(3)MFC类库的常用“类”和“函数”,如CString类。

 

2.2.2MFC应用程序框架结构类

什么是MFC?

为VC++编程环境所提供的类库,主要是对WinAPI进行重新封装。

总共大约160个类。

简单地说,每个MFC类都包括了一些函数,函数放到类中,符合C++编程方法。

这些函数,必须通过类定义对象才能使用。

一个MFC应用程序并不直接操作上述类,而是以上述类为基类派生新的类,从而构建Windows应用程序的基本框架。

例如,应用程序Li2_1中的类与这些基类的派生关系:

2.2.3MFC应用程序分析(单文档模板)

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)执行CXApptheApp;

2)执行应用程序对象的构造函数

3)执行应用程序对象的InitInstance(),在其中创建

框架窗口对象;文档对象;视图对象

4)执行文档对象的构造函数,和OnNewDocment()

5)执行框架窗口对象的构造函数,和OnCreate()

6)执行视图窗口对象的构造函数,和UpdateInitial()

7)执行视图窗口对象的OnDraw()

8)等待消息,当有消息到达时执行对应的消息映射函数。

 

2.在单文档程序中进行编程的方法

(1)基本思路

1)设计程序界面,从用户出发,确定用户操作所对应的功能;

2)在类向导中生成用户事件对应的消息映射函数;

3)进入所生成的函数,编写实现功能的代码(C++语言)

(2)类向导使用方法

利用ClassWizard可以为它建立新类、进行消息映射、增加类的成员变量、修改已存在的成员函数和成员变量等。

类向导窗口的使用方法:

Ctrl+w打开,

ClassName选择存放映射函数的类

Object选择发生事件的对象,可以是菜单、控件等

Messages选择消息,双击消息可以产生函数。

MemberFunction消息响应函数,双击函数进入代码窗口。

ClassName选择类,将生成的映射函数类放到这个类。

Object该类中能够响应消息的对象(成员),包括菜单、控件等

Messages选择消息,双击消息可以产生函数。

MemberFunction消息响应函数,双击函数进入代码窗口。

一旦函数被产生,就可以进入源代码文件去编写它。

此函数将在收到系统消息时自动执行。

消息对话框

一种简单的对话框,用户可以直接调用消息对话框函数来使用它,而不需要自己创建。

这里介绍2个:

MessageBox(LPCTSTRlpText);

函数参数为字符串类型,功能是在弹出窗口中显示字符串。

来源:

CWnd类。

AfxMessageBox(LPCTSTRlpText);

函数参数为字符串类型,功能是在弹出窗口中显示字符串。

来源:

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主菜单打开。

ClassName选择存放映射函数的类

Object选择发生事件的对象,可以是菜单、控件等

Messages选择消息,双击消息可以产生函数。

MemberFunction消息响应函数,双击函数进入代码窗口。

ClassName选择类,将生成的映射函数类放到这个类。

Object该类中能够响应消息的对象(成员),包括菜单、控件等

Messages选择消息,双击消息可以产生函数。

MemberFunction消息响应函数,双击函数进入代码窗口。

一旦函数被产生,就可以进入源代码文件去编写它。

此函数将在收到系统消息时自动执行。

2.5应用实例

功能:

编写一个单文档应用程序Sy2,程序运行后,首先在视图窗口中输入文本,然后通过键盘上的光标键控制该文本向左、向右、向上和向下4个方向移动。

编程步骤:

新建单文档程序Sy2

找到视图类CSy2View声明部分,为视图类增加成员变量

intx,y;//输出位置

CStringm_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的映射函数写代码

switch(nChar)

{caseVK_LEFT:

x--;break;

caseVK_RIGHT:

x++;break;

caseVK_UP:

y--;break;

caseVK_DOWN:

y++;break;}Invalidate();

进入OnDraw函数写代码

pDC->TextOut(x,y,m_string);

调试运行

分析:

本程序使用了3个消息映射,其中刷新消息映射OnDraw()是建立程序时所生成的。

已有的本程序将变量和函数(消息映射函数)都放到了视图类中,使得互相访问简化。

Invalidate()功能是刷新视图窗口,相当于间接调用OnDraw

本例学习要点是如何建立消息映射函数

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2