程序员将结合自己的实际,从适当的MFC类中派生出自己的类,实现特定的功能,达到自己的编程目的[4]。
(3)虚拟函数和动态约束:MFC以C++为基础,自然支持虚拟函数和动态约束。但是作为一个编程框架,有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃肿,消耗内存,效率低下。例如,CWnd封装Windows窗口对象时,每一条Wnidows消息对应一个成员函数,这些成员函数为派生类所继承。如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。
这样,通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在适当的时候、适当的地方来调用程序的代码。
(4)MFC的宏观框架体系
如前所述,MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。为了支持对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。
总之,MFC封装了Win32API,OLEAPI,ODBCAPI等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。
MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件[5]。MFC是C++类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C++对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制[6]。
2.1.2 数据库开发技术概述
一个数据库应用程序有数据库系统和数据库应用程序组成[7]。数据库系统的主要任务是对大量数据的管理,通常是由数据库管理员利用数据库管理系统(DBMS)来完成管理任务。而数据库应用程序则是面对最终用户的,它实现用户的业务逻辑、提供易于操作的界面等。数据库应用程序要通过DBMS交互实现对数据库中数据的操作。
数据库管理系统(DBMS)是复杂度很高的软件,如果开发数据库应用程序的开发人员自己编写程序通过DBMS的专用接口与其通信是非常复杂的工作,而往往这些工作中有大部分是类似的。因此,产生了数据库访问技术。
数据库访问技术将数据库外部与其通信的过程抽象化,通过提供访问接口,简化了客户端访问数据库的过程[8]。
在Visual C++ 下开发数据库应用程序可以使用的数据库访问技术多种多样,这些技术各有自己的特点,他们提供了简单、灵活、访问速度快和可扩展性好的开发技术。Visual C++ 提供的主要访问数据库的技术如下: MFC员工反应时间检测评测系统设计(3):http://www.751com.cn/jisuanji/lunwen_3674.html