我以为,最能体现一个应用程序框架的先进性的是它的委托模型,即对Windows消息的封装机制。(对Windows消息驱动机制的封装就不是很容易的)。"WindowsAPI 是windows95和windows NT的一部分,在早期的windows程序开发中,程序员必须用C语言编写大量的重复代码后才能开始编写处理问题的是指部分。Windows 使得程序与硬件无关。增强了程序的可移植性。所有的windows应用程序都采用消息驱动机制,亦即windows程序是通过操作系统发送的消息来处理用户的输入的。 The window receives the user input in the form of "messages" to the window. A window also uses messages to communicate with other windows. Getting a good feel for messages is an important part of learning how to write programs for Windows.When I say that "Windows sends a message to the program" I mean that Windows calls a function within the program-a function that you write and which is an essential part of your program's code. The parameters to this function describe the particular message that is being sent by Windows and received by your program. This function in your program is known as the "window procedure." -----最自然的封装方式是采用虚成员函数。如果要响应某个消息就重载相应的虚函数。但是MFC采用的却是“古老”的宏定义方法----MFC实际上是一个扩展的、丰富的C++类层次结构,在MFC中封装了SDK结构、功能及应用程序框架内部技术,隐藏了过去许多的Windows程序必须处理的许多的重复工作。用宏定义方法的好处是省去了虚函数VTable的系统开销。(由于Windows的消息种类很多,开销不算太小)。不过带来的缺点就是映射不太直观,和VCL的委托模型相比,MFC的映射方法就显得太落后了。而C++Builder对C++语言进行了扩展,以便引入组件、事件处理、属性等新特性。由于功夫做在编译器级,生成的源代码就显得十分简洁。但是由于扩展的非标准特性,使用VCL的C++Builder的源代码无法被其它编译器编译。而MFC的功夫做在源代码级,虽然消息映射代码较为复杂且不直观,但兼容性非常好。只要你有MFC库的源代码,你的MFC程序理论上用任何符合ANSI标准的编译器均可编译通过。C++Builder 3以上版本可以原封不动直接编译Visual C++程序,很多人认为这是C++Builder的兼容性好,实际上很大程度应归功于MFC的兼容性好;而因为C++Builder对语言作了扩展,VC不能编译C++Builder的程序,看来在这方面VC要输给C++Builder了。而且VCL所支持的组件、属性等都是MFC所缺乏的特性。虽然VC也能支持组件,但要通过AppWizard先生成一个“包裹”类(wrapper),不如VCL来得简洁。有很多人使用C++Builder就是冲着控件板上那一大堆组件来的,VC虽然能使用的组件也很多(也许不比C++Builder少),但由于不方便而对RAD程序员没有吸引力。
------------------
上面是本人整理的以前的帖子