资源描述
Windows程序要处理的消息种类如下:Windows消息。该类消息以WM_开头(WM_COMMAND例外),通常由窗口和视图来处理。这些消息常常带有参数,用于决定处理该消息的方式。由控件和其它子窗口发送给父窗口的WM_COMMAND消息。这些消息中包括EN_CHANGE通知码。如当用户在编辑框中键入文本或进行修改时,就会向系统发送一个带EN_CHANGE通知码的WM_COMMAND消息。来自于用户界面对象的WM_COMMAND消息。这些用户界面对象包括菜单、工具栏按钮和快捷键。,11.3MFC基础,11.3.1MFC类库简介类库是一个可以在应用程序中使用的相互关联的C+类的集合。与一般类库不同,MFC是一个Windows应用程序框架,它定义了应用程序的结构并实现了标准的用户接口。MFC提供了管理窗口、菜单、对话框的代码,可实现基本的输入输出和数据存储。MFC为我们提供了大量可重用代码,隐藏了程序设计中的许多复杂工作,这也是面向对象方法的典型体现。,MFC的类可分为两种:从CObject派生的类以及非派生类。本小节按功能组对MFC库中的常用类做一简要介绍。1根类CobjectMicrosoft基本类库中的大多数类都是由CObject类派生而来的。CObject对所有由它派生出的类提供了有用的基本服务。,2MFC应用结构类MFC应用结构类用于构造一个应用的框架。它们对大多数应用提供了通用功能。我们可以在框架中填写对于应用的特定的功能。AppWizard可以产生几种类型的应用,所有这些都以不同的方式使用应用框架。1)应用程序和线程支持类每一个应用都有一个也只有一个应用对象,这个对象派生自CWinApp。Microsoft基本类库支持在一个应用中有多个执行线程。所有的应用都必须至少有一个线程。CWinApp对象使用的线程叫做“主”线程。CWinThread封装了一部分操作系统的线程功能。,2)命令例程类当使用鼠标选择菜单或控制条按钮,并与应用程序交互时,应用程序把消息从受影响的界面对象发至合适的命令目标对象。命令目标对象从CCmdTarget派生出来,包括CWinApp、CWnd、CDocTemplate、CDocument、CView和它们的派生类。框架支持自动命令例程,这样,命令可被应用程序中活动的大多数相应的对象处理。,3)文档类文档类对象管理应用程序的数据并与视图类对象交互。视图对象表示窗口的客户区并显示文档的数据,允许用户与之交互。文档和视图都是由文档模板对象产生的。,4)文档模板类当创建一个新文档/视图时,文档模板对象一并创建文档、视图和框架窗口对象。3窗口、对话框和控件类1)CWnd类CWnd类是所有窗口的基类。程序中可以使用MFC中的CWnd派生类,也可以从其中派生出自己的类。,2)框架窗口类CFrameWnd是SDI应用程序主框架窗口的基类。框架窗口通常包含其它窗口,如视图、工具条和状态条。3)对话框类类CDialog和它的派生类封装了对话框功能。由于对话框是一种特殊的窗口,所以CDialog是从CWnd派生的。CDialog又是所有对话框的基类。,4)视图类CView是视图类的基类。CView及其派生类是一些子窗口,表示框架窗口的客户区。视图显示数据,并接收文档的输入,以便编辑或选择数据。5)控件类控件类封装了各式各样的标准Windows控件,从静态文字控件到树形控件。另外,MFC提供了一些新控件,包括带位图和控制条的按钮。,6)控件条类控件条附加在一个框架窗口中。它们包含按钮、状态面板或一个对话模板。自由浮动控件还可以调用工具调色板,这是通过把它们附加在CMiniFrameWnd对象上实现的。,4菜单类类CMenu直接从CObject派生出来,封装了Windows中菜单的数据结构,它提供一个界面,通过它可访问应用程序的菜单。5绘图和打印类在Windows中,所有的图形输出都在一个可视的绘图区上,这叫做一个设备上下文(或DC),所有对绘图的调用都是通过一个设备上下文对象完成的。,6简单的数据类型类这些类封装了绘图坐标、字符串、时间和数据信息。7数组、列表和映射类数组是一维数据结构,它们在内存中是连续存储的。因为数组中任何一个给定元素的内存地址可以通过将元素的下标乘以一个元素的大小再加上数组的基地址而得到,所以数组支持非常快的随机访问。,8文件和数据库类这些类允许将信息存储在一个数据库或一个磁盘文件中。有两个数据库类的集合DAO和ODBC,它们提供了相似的功能。DAO组使用数据访问对象实现,ODBC组使用开放式数据库对象实现。还有用于操作标准文件、Active流和HTML流的类的集合。1)文件I/O类这些类对传统磁盘文件、内存文件、Active流和Windows套接字提供了一个接口。,2)DAO类这些类与其它应用框架一起工作,可以使对DAO(数据访问对象)数据库的访问更简便。DAO类使用的数据库引擎与MicrosoftVisualBasic和MicrosoftAccess相同。DAO类还能访问许多支持开放数据库链接(ODBC)驱动程序的数据库。3)ODBC类这些类和其它应用框架一起工作,可以使得对许多支持开放数据库链接(ODBC)的数据库的访问更简便。,9Internet和网络类这些类允许和其它使用ISAPI的计算机或一个WindowsSocket交换信息。Internet和网络类还有创建ISAPI扩展DLL的类的集合和操作Windows套接字的类的集合。10.OLE类OLE类与其它应用框架一起工作,可以使对ActiveX的访问更方便,可以使程序更容易地提供ActiveX的功能。,11调试和异常类这些类提供对调试动态内存分配的支持,并且支持将异常信息从产生异常的函数传递给捕获异常的函数。,11.3.2MFC应用程序框架应用程序框架包含用于生成应用程序所必须的各种面向对象组件的集合。在VisualC+中,MFCAppWizard能方便地生成应用程序框架,用户可以在此基础上进行进一步的编程工作。MFCAppWizard生成的应用程序包括以下要素。WinMain函数。Windows要求应用程序必须有一个WinMain函数。但在我们的程序中看不到WinMain,因为它隐藏在应用程序框架中。,应用程序类CmyFirstApp。该类的每一个对象代表一个应用程序。程序中默认定义一个全局CMyFirstApp对象,即theApp。CWinApp基类决定theApp的大多数行为。应用程序启动。启动应用程序时,Windows调用应用程序框架内置的WinMain函数,WinMain寻找由CWinApp派生出的全局构造的应用程序对象。在C+程序中,全局对象在主程序执行之前构造。,成员函数CmyFirstApp:InitInstance。当WinMain函数找到应用程序对象时,它调用伪成员函数InitInstance,这个成员函数调用所需的构造并显示应用程序的主框架窗口。必须在派生的应用程序类中重载InitInstance,因为CWinApp基类不知道需要什么样的主框架窗口。成员函数CwinApp:Run。函数Run隐藏在基类中,但是它发送应用程序的消息到窗口,以保持应用程序的正常运行。在WinMain调用InitInstance之后,便调用Run。,CMainFrame类。CMainFrame类的对象代表应用程序的主框架窗口。当构造函数调用基类CMainFrame的成员函数Create时,Windows创建实际窗口结构,应用程序框架把它连接到C+对象。函数ShowWindows和UpdateWindow也是基类的成员函数,必须调用它们来显示窗口。,文档与视图类。MFC通过“文档视图”的结构为应用程序提供一种将数据与视图相分离的存储方式。文档类的作用是将应用程序的数据保存在文档类对象中,以及从磁盘文件中读或向磁盘文件中写数据。视图类的作用是显示数据和编辑数据。在文档、视图以及应用程序框架的其余部分之间存在着非常复杂的相互作用过程。一个文档至少应该有一个与之对应的视图。很多情况下,一个文档有多个视图与之对应。,关闭应用程序。如果用户通过关闭主框架窗口来关闭应用程序,这个操作就将激发一系列事件的发生,包括CMainFrame对象的析构、从Run中退出、从WinMain中退出和CMyFirstApp对象的析构。,11.4使用VisualC+开发Windows程序实例,为了使读者对Windows程序开发方法有一个初步印象,下面我们给出一个完整的使用VisualC+开发Windows程序的实例。用MFC向导创建如图11-3所示的编辑框,在编辑框中实现算术加、减、乘和除的运算。,图11-3可实现算术加、减、乘和除的运算的界面,1利用MFC向导建立程序框架(1)在进入VisualC+6.0的第一个界面下,选择MFCAppwizard(exe),并设置工程名及其所在位置,如图11-4所示。,
展开阅读全文