MFC定时器原理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ClassWizard在类的定义中声明了消息处理函数 : 在类的定义中声明了消息处理函数
class CMainFrame : CFrameWnd { public: CMainFrame(); protected: //{{AFX_MSG(CMainFrame) // 声明消息处理函数原形 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); // 由程序向导自动生成 afx_msg void OnClose(); // 由ClassWizard类向导添加 afx_msg void OnDestroy(); afx_msg void OnEditCopy(); //}}AFX_MSG DECLARE_MESSAGE_MAP() // 声明使用消息映射宏 };
MFC应用程序对象之间的关系 应用程序对象之间的关系
6.3.2 MFC应用程序的生与死 应用程序的生与死
在MFC应用程序的CWinApp派生类对象theApp是一个全局 变量,代表了应用程序运行的主线程。它在程序整个运行 期间都存在,它的销毁意味着运行程序的消亡。 MFC应用程序启动时,首先创建应用程序对象theApp,这 时将自动调用应用程序类的构造函数初始化对象theApp, 然后由应用程序框架调用MFC提供的AfxWinMain()主函数。 AfxWinMain()主函数首先通过调用全局函数AfxGetApp()获 取应用程序对象theApp的指针pApp,然后通过pApp调用应 用程序对象的有关成员函数,完成程序的初始化和启动工 作,最后调用成员函数Run(),进入消息循环。 程序运行后将收到WM_PAIБайду номын сангаасT消息,调用OnPaint()函数绘 制客户区窗口。如果Run()收到WM_QUIT消息,则结束消 息循环,然后调用函数ExitInstance(),结束程序运行。
6.3.1 应用程序框架中的对象
MFC应用程序框架提供了构建应用程序所需要 的类,在程序运行时能够生成运行时类的对象, 如代表应用程序对象、文档对象、视图对象和 框架窗口对象。应用程序对象theApp是一个唯 一的全局变量,它的主要功能是通过调用 WinMain()主函数启动程序的运行。 MFC应用程序框架也有一个作为程序入口点的 WinMain()主函数,但在源程序中看不见该函 数,它在MFC中已定义好并同应用程序相链接。
MFC应用程序 应用程序MESSAGE_MAP消息映射形式: 消息映射形式: 应用程序 消息映射形式 BEGIN_MESSAGE_MAP(theclass, baseclass) //{{AFX_MSG_MAP(theclass) ON_ . . . . . . // MFC预定义的消息映射宏 // 用户自定义的消息映射宏 . . . . . . //}}AFX_MSG_MAP END_MESSAGE_MAP()
6.4.2 消息的发送
发送消息到一个窗口可以采用传送(Send)或寄 送(Post)方式,这两种方式之间的主要区别是消 息被接收对象收到后是否立即被处理。Windows提 供了三个API函数用于消息的发送。 函数SendMessage()用于向一个或多个窗口传送消 息,该函数将调用目标窗口的窗口函数,直到目 标窗口处理完收到的消息,该函数才返回。 函数PostMessage()用于向一个或多个窗口寄送消息, 它把消息放在指定窗口创建的线程的消息队列中, 然后不等消息处理完就返回。
采用MFC编程的优点: 编程的优点: 采用 编程的优点 使用标准化的程序代码结构,有利于程序员之 间的交流。 Visual C++为MFC提供了大量的工具支持,提高 了编程效率。如利用MFC AppWizard创建MFC 应 用 程 序 框 架 , 利 用 ClassWizard 方 便 地 对 Windows消息进行管理。 MFC 应 用 程 序 的 效 率 较 高 , 只 比 传 统 的 Windows C程序低5%左右。并且,在MFC应用 程序中还允许混合使用传统的Windows API函数。 其它优势:完全支持Windows所有的函数、控件、 消息、菜单及对话框;具有良好的稳定性和可 移植性,更符合微软的风格等。
6.4 MFC消息管理 消息管理
MFC消息管理是MFC编程的一个重要内容,也是 编写MFC应用程序的基础。 MFC应用程序消息处理的方式与SDK应用程序有所 不同。MFC应用程序框架截取了Windows向应用程 序发出的消息,再确定将消息发送给哪一个对象, 可以根据需要利用函数重载对消息进行处理,但不 需要处理的消息将由应用程序框架自动处理。 消息管理包括消息的发送和处理。对于消息发送, MFC提供了类似于API函数功能的消息发送函数, 而MFC消息处理的内部机制则相对复杂一些。从编 程的角度出发,我们只需了解其大致的原理。
6.2.3 学习 学习MFC的方法 的方法
首先要对Windows编程概念和API函数有一定的了解,如 Windows API有哪些功能和哪些常用的数据结构等。 学会抽象地把握问题,不求甚解,不要一开始学习Visual C++就试图了解整个MFC类库。从理解和使用两个方面学 习MFC,理解MFC应用程序的框架结构。 先大体上了解MFC的概念、组成和基本约定,从简单的类 入手,结合程序设计,由浅入深,循序渐进、日积月累。 编程时如果MFC某个类能完成所需要的功能,可以直接调 用已有类的方法(成员函数)。否则,可以利用面向对象 技术中的“继承”方法对MFC类的行为进行扩充和修改, 从MFC中已有的类派生出自己需要的类。 学习MFC,另一点就是不要过分依赖于向导(Wizard)工 具。向导能做许多工作,但同时掩饰了太多的细节。
6.2.2 MFC体系结构 体系结构 MFC主要组成部分:类、宏和全局函数。 类是MFC中最主要的内容。MFC类是以层次结 构方式组织起来的。MFC中的类分成两部分,除 了一些辅助类,大多数的MFC类是直接或间接从 根类CObject派生而来。 几乎每一个派生层次都与一具体的Windows实例 相对应,如文档类、窗口类和视图类等。 MFC宏主要功能:消息映射、运行时对象类型服 务、诊断服务、异常处理。 MFC约定:全局函数以“Afx”为前缀,全局变量 以“afx”为前缀。
6.4.1 MFC消息映射机制 消息映射机制
MFC采用 消息映射 ( Message Map) 机制取代 ) C/C++语言中的switch-case结构来处理消息。 MFC消息映射机制包括一组消息映射宏 消息映射宏。一条消 消息映射宏 息映射宏把一个Windows消息和其消息处理函数 联结起来。 MFC应用程序框架提供了消息映射功能。 在类的实现源文件中用BEGIN_MESSAGE_MAP() 和END_MESSAGE_MAP()宏来定义消息映射。 在类定义的结尾用DECLARE_MESSAGE_MAP() 宏来声明使用消息映射。
6.3 MFC应用程序框架 应用程序框架
尽管每个应用程序具体实现的功能不同,但同一 类程序的基本结构是相同的。因此,通常采用 MFC AppWizard创建一个MFC应用程序框架 应用程序框架。 应用程序框架 MFC不仅仅是一个类库,它还提供了一层建立在 MFC MFC类对象封装上的附加应用程序框架。应用程 序框架是为了生成一般的应用程序所必需的各种 软组件的集成,是类库的一种超集。 类库只是一种可以嵌入到任何程序中的、提供某 些特定功能的类的集合。而应用程序框架却定制 了应用程序的结构和源代码,其中的类对象既相 互独立、又相互作用,形成一个统一的整体。
注意: 注意 : 特殊注解“//{{AFX_MSG_MAP”是ClassWizard类 向导用于维护消息映射宏的标记,用户不要删除注解轻易 修改注解内的代码。
ON_MESSAGE(message , memberFxn)
例 利用ClassWizard为框架类添加消息WM_CLOSE、 WM_DESTROY及菜单项“Edit|Copy”的消息处理函 数,分析ClassWizard完成了哪些工作。
启 动 ClassWizard , 添 加 要 求 的 三 个 消 息 处 理 函 数 , ClassWizard将在类的实现文件中添加三个消息映射宏和消息 处理函数。消息映射宏如下: BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() // 由MFC AppWizard程序向导自动生成的消息映射 ON_WM_CLOSE() // 由ClassWizard类向导添加 ON_WM_DESTROY() ON_COMMAND(ID_EDIT_COPY, OnEditCopy) //}}AFX_MSG_MAP END_MESSAGE_MAP()
Mfc42UD.lib MfcO42D.lib MfcD42D.lib Nafxcw.lib NafxcwD.lib gdi32.lib user32.lib kernel32.lib msvcrt.lib msvcrtd.lib libcmt.lib libc.lib
MFCxxUD.DLL的导入函数库(Unicode Debug版) MFCOxxD.DLL的导入函数库(OLE Debug版) MFCDxxD.DLL的导入函数库(Database Debug版) MFC静态链接库(Release版) MFC静态链接库(Debug版) GDI32.DLL的导入函数库 USER32.DLL的导入函数库 KERNEL32.DLL的导入函数库 MSVCRT.DLL(C运行函数库)的导入函数库 MSVCRTD.DLL(Debug版C运行函数库)的导入函数库 C运行函数静态链接库(多线程) C运行函数静态链接库(单线程)
MFC应用程序运行后各函数的调用关系 应用程序运行后各函数的调用关系
InitInstance()函数是派生类唯一需要重载的函数,它负 责应用程序的初始化,如初始化数据、创建文档模板、处理 命令行以及显示应用程序主窗口。
6.3.3 常用的 常用的MFC文件和库文件 文件和库文件
文件名称 afxwin.h afxext.h afxdisp.h afxdtctl.h afxcmn.h Mfc42.lib Mfc42D.lib MfcS42.lib MfcS42D.lib Mfc42U.lib 声明MFC核心类 MFC扩展文件,声明工具栏、状态栏、拆分窗口等类 声明OLE类 声明支持IE 4公用控件的MFC类,如CImageList等 声明Windows公共控件类 MFCxx.DLL的导入函数库(Release版) MFCxx.DLL的导入函数库(Debug版) MFCSxx.DLL的导入函数库(Static Release版) MFCSxxD.DLL的导入函数库(Static Debug版) MFCxxU.DLL的导入函数库(Unicode Release版) 说 明
6.2 MFC微软基础类 微软基础类
利用Windows API开发程序的用户有这样的体 会,即使开发一个简单的Windows应用程序也需要 对Windows的编程原理有很深刻的认识,需要手工 编写冗长的代码。由于程序的出错率是随着代码长 度的增加呈几何级数增长的,而且当程序长度逐渐 膨胀时,调试程序会变得越来越困难。因此,传统 的Windows应用程序设计需要程序员有极大的耐心 和丰富的编程经验。 Visual C++捆绑了微软的基础类MFC,编程时 我们就可以利用类的可重用性和可扩充性,大大降 低Windows应用程序设计的难度和工作量。
6.2.1 MFC概述 概述
类库是一个可以在应用程序中使用的相互关联的 C++类的集合。 MFC作为一个Windows编程类库, 它包含了200多个类,封装了Windows的大部分编 程对象以及与它们有关的操作。 虽然程序在功能上千差万别,但从本质上看,都 可以分为用户界面设计、文件操作、数据库访问 及多媒体使用等几部分,这些都可以通过一些类 来实现。MFC提供了一个标准化的程序结构,使 开发人员不必从头设计一个Windows应用程序。 MFC实际上是一个庞大的文件库,它由几百个执 行文件和源代码文件(如H文件)组成。
相关文档
最新文档