- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9单元 WINDOWS编程
教学目标
介绍WINDOWS编程的基本思想和MFC程序的基本结构。
学习要求
理解WINDOWS的基本编程思想,特别是其消息传递机制,弄清MFC程序的组成及各部分的作用。
授课内容
Microsoft Windows是广泛应用的台式机计算机操作系统,具有图形用户界面和多任务、多窗口等特点。目前Windows已成为微机上的主流操作系统,几乎一统天下,在Windows平台上进行软件开发也已成为程序设计的主流。
9.1 WINDOWS编程的基本思想
键盘消息
鼠标消息
其他消息
图9-1 事件驱动原理
Windows编程使用事件驱动的程序设计思想。在事件驱动的程序结构中,程序的控制流程不再由事件的预定发生顺序来决定,而是由实际运行时各种事件的实际发生来触发,而事件的发生可能是随机的、不确定的,并没有预定的顺序。事件驱动的程序允许用户用各种合理的顺序来安排程序的流程。对于需要用户交互的应用程序来说,事件驱动的程序设计有着传统程序设计方法无法替代的优点。事件驱动是一种面向用户的程序设计方法,在程序设计过程中除了完成所需要的程序功能之外,更多的考虑了用户可能的各种输入(消息),并有针对性地设计相应的处理程序。事件驱动程序设计也是一种“被动”式的程序设计方法,程序开始运行时,处于等待消息状态,然后取得消息并对其作出相应反应,处理完毕后又返回处于等待消息的状态。使用事件驱动原理的程序的工作流程如图9-1所示。
事件驱动围绕着消息的产生与处理展开,事件驱动是靠消息循环机制来实现的。消息是一种报告有关事件发生的通知。Windows应用程序的消息来源有以下四种:
(1)输入消息:包括键盘和鼠标的输入。这一类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由应用程序来处理消息。
(2)控制消息:用来与Windows的控制对象,如列表框、按钮、检查框等进行双向通信。当用户在列表框中改动当前选择或改变了检查框的状态时发出此类消息。这类消息一般不经过应用程序消息队列,而是直接发送到控制对象上去。
(3)系统消息:对程序化的事件或系统时钟中断作出反应。一些系统消息,象DDE消息(动态数据交换消息)要通过Windows的系统消息队列,而有的则不通过系统消息队列而直接送入应用程序的消息队列,如创建窗口消息。
(4)用户消息:这是程序员自己定义并在应用程序中主动发出的,一般由应用程序的某一部分内部处理。
9.2 MFC编程
Microsoft提供了一个基础类库MFC(Microsoft Foundation Class),其中包含用来开发C++应用程序和Windows应用程序的一组类。这些类用来表示窗口、对话框、设备上下文、公共GDI对象如画笔、调色板、控制框和其他标准的Windows部件,封装了大部分的Windows API(Application Programming Interface:应用程序接口)。使用MFC,可以大大简化Windows编程工作。
MFC中的类可分为两种:CObject类的派生类及非CObject派生类。非CObject派生类数量不多,但大都很常用。几个常用的非CObject派生类如CTime,CTimeSpan,CString和CFile已分别在第7单元和第8单元中介绍过。
CObject派生类的基本特征为:支持序列化(Serialize,应用见第13单元)、运行时类信息访问(Dynamic,应用见第12单元)、对象诊断输出(参看10.6.4:“CObject::Dump()成员函数”)和与集合类兼容(参看12.7:“集合类”)等。
MFC将Windows应用程序从开始运行、消息传递到结束运行所需的各步骤均封装在CWinApp类中,CWinApp类表示MFC应用程序的应用对象。CWinApp类从CObject类的子类CWinThread类(定义MFC内的线程行为)派生。一个MFC应用程序必须有且只能有一个从WinApp类派生的全局应用程序对象,此对象在运行时刻控制应用程序中所有其他对象的活动。
典型的Windows应用程序结构有以下四种:
控制台应用程序:在本教程第1单元到第8单元介绍的所有程序均为控制台应用程序。控制台应用程序结构简单,可以不使用MFC类库。
基于框架窗口的应用程序:某些应用程序仅需最小的用户界面和简单的窗口结构,这时可使用基于框架窗口的方案。在此方案中,主应用程序窗口为框架窗口,CFrameWnd派生类对象附属于应用程序的CWinApp派生类对象的m_pMainWnd成员。第9单元到第11单元的例题程序均为基于框架窗口的程序。
基于对话框的应用程序:基于对话框的应用程序与基于框架窗口的应用程序差别不大,只是用CDialog派生类对象代替
文档评论(0)