版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第7章MFC的原则和方法,保留所有权利。一个优秀的编程工具通常与一个功能强大的类库相匹配,这个类库封装了Windows编程所需的大量函数和数据结构。微软基础类是微软公司设计的一个类库。用MFC编程提高了Windows应用程序的开发效率。然而,由于MFC应用程序结构的复杂性和透明性,要完全掌握MFC应用程序的内部机制需要付出很大的努力。理解MFC仅仅是一个过程和一种手段,最终的目标是熟练地使用MFC。本章的主要内容有:窗口的编程机制,MFC的基本原理和用法:MFC类MFC应用框架MFC消息管理MFC宏常用MFC类,7.1 Windows编程基础,Windows是一个多进程图形窗口操作系统,与DO
2、S应用有很大不同。DOS应用程序采用顺序执行过程,而Windows是一个基于事件的消息驱动系统。Windows应用程序根据“事件消息处理”的非顺序机制运行。当事件发生时(如点击鼠标、键盘输入和执行菜单命令等)。),窗口将根据特定事件生成相应的消息,并将其发送到指定应用程序的消息队列;应用程序从消息队列中获取消息,并根据不同的消息对它们进行不同的处理。应用编程接口(应用编程接口)是视窗操作系统和应用程序之间的标准接口,它提供成千上万的标准函数、宏和数据结构定义。在用可视化语言编程时,可以调用窗口应用程序接口函数,窗口应用程序可以通过调用标准的窗口应用程序接口函数来使用系统提供的函数。一些动态链接
3、库中定义了Windows API函数,其中最重要的是User32.dll、Gdi32.dll和Kernel32.dll库文件。7.1.1关于API和SDK,传统的SDK编程:程序员通过自己调用API函数逐步实现程序的各个部分的功能。SDK应用程序的结构很清楚,但是程序员必须编写所有的功能代码。用Visual C语言编写类似SDK的应用程序:首先,使用Win32应用程序向导构建一个Windows应用程序框架,然后根据需要向程序项目中添加一些头文件、实现源文件和资源文件,并编写特定的程序代码。编写一个名为Hello的类SDK应用程序,点击鼠标时调用API函数弹出一个提示对话框。1执行“文件|新建”
4、菜单命令,在“新建”对话框的项目页中选择Win32应用程序项目类型,并输入程序名“您好”。选择“典型的”你好世界!在向导应用程序项目的步骤1中,单击“完成”按钮。在窗口函数WndProc():casewm _ LBBUTTON DOWN :消息框(空,您按了鼠标左键!消息,空);休息;软件开发工具包应用程序结构:由应用编程接口函数构造的窗口程序的功能由三部分组成:入口功能、窗口功能和窗口系统。每个程序都有一个主函数,WinMain()函数是窗口程序的入口主函数。这个函数的主要任务是完成一些初始化工作和维护一个消息循环。当消息循环结束时,WinMain()函数退出,应用程序退出。此外,WinMa
5、in()函数还负责注册、创建和显示窗口。窗口程序以窗口的形式存在,在不同窗口之间传输消息是窗口和应用程序之间的主要通信形式。程序的具体功能由不同的窗口功能实现。7.1.2手柄。在窗口中,句柄用于识别应用程序中的不同对象以及同一类对象的不同实例,如特定窗口、按钮、输出设备、画笔和文件。相应的对象信息可以通过句柄获得。常用的手柄类型有:HWND、HINSTANCE、HDC、HCURSOR、HICON、HMENU等。句柄经常被用作窗口消息和应用编程接口函数的参数,并且经常在用应用编程接口方法编写窗口应用程序时被使用。但是,当使用MFC编写Windows应用程序时,因为相应的MFC类已经封装了句柄,所
6、以在大多数情况下不再需要访问句柄。有两种方法可以获得MFC类对象的句柄:例如,通过访问类的公共属性成员变量,类CWnd的成员变量m_hWnd就是窗口对象的句柄。首先,定义一个句柄,然后调用MFC类的成员函数Attach(),将该句柄与MFC类对象相关联,然后该句柄成为MFC类对象的句柄。在退出对象范围之前,调用成员函数Detach()将句柄与对象分开。如下所示:CWnd myWndHWND hWnd。我的Wnd。附加(hWnd)。我的Wnd。分离();所谓的消息是用来描述事件发生的信息,而事件是对窗口的操作。事件与信息密切相关。事件是原因,消息是结果,事件产生消息,消息对应于事件。所谓消息响应
7、的本质就是事件响应。消息驱动是窗口应用的核心。所有外部响应(如键盘、鼠标和计时器)都被窗口拦截,然后转换成消息并发送到应用程序中的目标对象。应用程序根据消息的具体内容来处理它们。消息不仅可以通过窗口发送,还可以通过应用程序本身或其他程序发送。Windows为每个应用程序维护一个或多个消息队列,发送到每个程序窗口的消息按队列排列。7.1.3事件和消息,消息队列和应用程序中的轮询处理,窗口消息分为三种类型:标准窗口消息:以WM_前缀开头的消息(但不包括WM_COMMAND),包括鼠标消息、键盘消息和窗口消息,如WM_MOVE、WM_PAINT等。控制通知消息:由控制操作引起的消息是由控制和子窗口发
8、送到其父窗口的WM_COMMAND通知消息。例如,当用户修改编辑控件中的文本时,编辑控件会向其父窗口发送一条WM_COMMAND通知消息。命令消息:用户界面对象(如菜单项、工具栏按钮和快捷键)发送的WM_COMMAND消息。与其他消息不同,命令消息可以由更广泛的对象处理,例如文档、文档模板、应用程序对象、窗口和视图。typedef结构tagMSG HWND hWnd/目标窗口句柄UINT消息;/消息标识WPARAM wParam/消息参数1(附加信息,16位)。/消息参数2(附加信息,32位)DWORD时间;/消息发送时间点pt;/发送消息时鼠标屏幕坐标消息;消息以消息结构表示,如程序Hell
9、o增加了键盘消息处理功能,判断当前按下的是a还是a键,并给出相应的提示。打开程序项Hello,在文件Hello . CPP:case WM _ KEYDOWN :/中的窗口函数WndProc()的切换消息处理分支中添加键盘消息的处理代码,如果(wParam=0 x41) /A或A键的虚拟键码是0x41h消息框(空,您按的键是A或A!KEYDOWN,空);否则消息框(空,你按的键不是A或A!KEYDOWN,空);休息;使用视窗应用编程接口开发程序的用户有这样的经验,即使他们开发一个简单的视窗应用程序,他们也需要对视窗的编程原理有深刻的理解,并且需要手工编写冗长的代码。因为程序的错误率随着代码长度
10、的增加而几何地增加,并且当程序长度逐渐扩大时,调试程序将变得越来越困难。因此,传统的Windows应用程序设计需要程序员有很大的耐心和丰富的编程经验。visual c+与微软的基本类MFC捆绑在一起。在编程时,可以利用类的可重用性和可扩展性,大大降低了窗口应用程序设计的难度和工作量。7.2 MFC微软基础类,7.2.1 MFC概述,类库是可以在应用程序中使用的相互关联的C类的集合。作为一个窗口编程类库,MFC包含200多个类,封装了大多数窗口编程对象及其相关操作。虽然程序的功能千差万别,但从本质上讲,它们可以分为用户界面设计、文件操作、数据库访问和多媒体使用,这些都可以通过一些类来实现。MFC
11、提供了一个标准化的程序结构,因此开发人员不必从头开始设计Windows应用程序。MFC实际上是一个巨大的文件库,由数百个执行文件和源代码文件(如H文件)组成。使用标准化的程序代码结构有利于程序员之间的交流。Visual C为MFC提供了大量的工具支持,提高了编程效率。例如,使用MFC应用程序向导创建MFC应用程序框架,使用类向导方便地管理Windows消息。MFC应用程序的效率较高,仅比传统的Windows C程序低5%左右。此外,传统的窗口应用程序接口函数可以混合在MFC应用程序中。其他优势:完全支持窗口的所有功能、控件、消息、菜单和对话框;它具有良好的稳定性和可移植性,更符合微软的风格。M
12、FC编程的优势:7.2.2 MFC架构,MFC的主要组件:类、宏和全局函数。类是MFC中最重要的内容。MFC类以分层的方式组织。MFC中的类分为两部分。除了一些辅助类,大多数MFC类都是直接或间接从根类CObject派生的。几乎每个派生级别都对应于一个特定的窗口实例,如文档类、窗口类和视图类。MFC宏的主要功能:消息映射、运行时对象类型服务、诊断服务和异常处理。MFC约定:全局函数以“afx”为前缀,全局变量以“Afx”为前缀。首先,我们应该对视窗编程的概念和应用编程接口函数有一定的了解,比如视窗应用编程接口有哪些功能以及常用的数据结构是什么。要学会抽象地把握问题,不要在开始学习Visual
13、C的时候就试图理解整个MFC类库。要从理解和使用两个方面来学习MFC,要理解MFC应用程序的框架结构。首先,我们对MFC的概念、组成和基本约定有一个大致的了解,从简单的类开始,结合程序设计。编程时,如果一个MFC类可以完成所需的功能,它可以直接调用现有类的方法(成员函数)。否则,我们可以通过使用面向对象技术中的“继承”方法来扩展和修改MFC类的行为,并从MFC中现有的类中派生出我们需要的类。学习MFC的另一点是不要太依赖向导工具。这个向导可以做很多工作,但同时它隐藏了太多的细节。7.2.3学习MFC的方法,虽然每个应用程序都有不同的功能,但同一种程序的基本结构是相同的。因此,MFC应用向导通常
14、用于创建一个MFC应用框架。MFC不仅是一个类库,而且还提供了一个基于MFC类对象封装的附加应用框架。应用程序框架是生成通用应用程序所需的各种软件组件的集成,它是类库的超集。类库只是可以嵌入到任何程序中并提供某些特定功能的类的集合。然而,应用程序框架定制了应用程序的结构和源代码,其中类对象是独立的,并且相互交互以形成一个统一的整体。7.3 MFC应用程序框架,它提供构建应用程序所需的类,并可以在程序运行时生成运行时类对象,如应用程序对象、文档对象、视图对象和框架窗口对象。应用程序对象是一个唯一的全局变量,它的主要功能是通过调用WinMain()主函数来启动程序。MFC应用程序框架也有一个Win
15、Main()主函数作为程序的入口点,但是这个函数在源程序中是看不到的。它已在MFC中定义并与应用程序链接。7.3.1应用程序框架中的对象与MFC应用程序对象之间的关系,MFC应用程序的CWinApp中的派生类对象theApp是一个全局变量,它代表了应用程序运行的主线程。它存在于程序的整个运行期间,它的破坏意味着正在运行的程序的消亡。当MFC应用程序启动时,首先创建应用程序对象theApp,然后自动调用应用程序类的构造函数来初始化对象theApp,然后应用程序框架调用MFC提供的主函数AfxWinMain()。AfxWinMain()主函数首先通过调用全局函数AfxGetApp()获取应用程序对
16、象theApp的指针pApp,然后通过pApp调用应用程序对象的相关成员函数,完成程序的初始化和启动,最后调用成员函数Run()进入消息循环。程序运行后,它将接收到WM_PAINT消息并调用OnPaint()函数来绘制客户端窗口。如果Run()接收到WM_QUIT消息,它将结束消息循环,然后调用函数ExitInstance()来结束程序运行。7 . 3 . 2 MFC应用程序的生存和消亡,MFC应用程序运行后各函数的调用关系,InitInstance()函数是派生类中唯一需要重载的函数,负责应用程序的初始化,如初始化数据、创建文档模板、处理命令行和显示应用程序的主窗口。7.3.3常用的MFC文件,MFC消息管理是MFC编程的重要内容,也是编写MFC应用程序的基础。MFC应用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长治市平顺县2025-2026学年数学四年级第二学期期中复习检测试题(含答案解析)
- 长沙市望城县2025年四年级数学下学期期末教学质量检测模拟试题含答案
- 长武县2025-2026学年数学四下期中教学质量检测试题(含解析)
- 2026年吉林省吉林市中考生物试卷附答案
- 地基与基础工程公司出纳员述职报告
- (2026版)小学家长委员会工作制度
- 2026年机修钳工技师考试题库(附答案)
- 《无人机应用技术概论》第4章 无人机行业应用
- 2025年重庆市沙坪坝区数学中考二模
- 发电厂设备检修准则
- 2026年贵州省公需课培训(专业技术人员继续教育)试题及答案
- 2026新教材人教版九年级上册英语暑假预习:Unit1-Unit5词汇详解
- 2026年农商银行面试题及答案
- (2026年)医院急性肾功能衰竭患者急救流程课件
- 重组抗破伤风毒素单克隆抗体临床应用专家共识(2026年版)
- (正式版)DB37∕T 5321-2025 《居住建筑装配式内装修技术标准》
- 南京创新投资集团考试题
- 小学五年级语文上学期时事阅读总题库2026
- 视听语言分析课件
- 粮食贸易业务管理办法
- 住房和城乡建设部部属事业单位2025年度第一批公开招聘应届毕业生笔试高频难、易错点备考题库及参考答案详解
评论
0/150
提交评论