现在手头有一个项目需要移植用户的一个很古老的legacy 项目 由MFC 开发。现在客户的想法是逐步实现, 这样的话要在MFC 的桌面程序中嵌入已经移植的 web 模块。 当然我们的新的模块是 JSF 实现的web page。 现在的初步的想法是将web page 嵌入一个 ActiveX 控件中。 在mfc 中 基本上我们可以用CWebBrowser 类来完成。 这个类会通过CreateControl 的方式来创建一个 ie browser Active X。
很长时间没有玩MFC了, 还是很怀念当初用它的日子。其实以前用它也是断断续续的, 当然为了理解它的机理搞了本侯捷老师的 深入浅出MFC。(这本书早已经送给一个朋友了)。 最近些年基本上都是玩Java,C#,对于它们来讲要运行时创建一个对象非常容易的。 只要classLoader 能够load 你所指定的对象的Class 基本上 Class.forName(className).newInstance() 就可以得到一个对象聊。
但是得知道c++ 是不支持这种动态方式来创建对象的。 在MFC又是怎么实现动态信息 甚至于动态创建的呢? 现在回头看看还是非常容易理解的, 借助大量的宏来定义来静态的一些全局对象。 比如如果能够一个类对应一个这种全局对象来表示它的class name, 它的base class。 在MFC中有一个CRuntimeClass 就是用来做这个事情的。 如果我们要实现动态创建我们的类必须继承自CObject。 然后 在class 定义中加入 DECLARE_DYNCREATE(类名)
DECLARE_DYNCREATE(CMyClass)
相当于
public:
static const AFX_DATA CRuntimeClass classCMyClass;
virtual CRuntimeClass* GetRuntimeClass() const;
static CObject* PASCAL CreateObject();
然后这几个东东就是再 IMPLEMENT_DYNCREATE 里面来实现了。还有一个 CRuntimeClass * pRC = RUNTIME_CLASS(类名) 也就是来找到这个 classCMyClass CRuntimeClass 静态对象聊。只不过在CRuntimeClass 中间还有很多其它attributes 比如创建函数指针,基类的CRuntimeClass* 指针。 都会在MFC框架中一一实现。这个就是MFC 的 runtime information 的 基石了。
最本质的实现机理差不多就是借助c++的宏 为每个类定义唯一的静态类型对象。接下来通过这个类型对象的CreateObject 方法来创建实例对象, 或者动态判断类型。
分享到:
相关推荐
里面的C++文件可以实行开机启动的功能,供各位刚开始学习C++的同学使用学习。
《如何实现MFC窗口的最大化以及控件随最大化发生位置变动原因》的VS2010示例代码
MFC实现多个对话框,程序能够完美运行!
mfc实现悬浮子窗口(动态实现):可以分为2种方法来实现;第一种是通过比较简单而实用的 动态实现api去修改属性;第二种办法是 实现的效果类似vs2008这样的 悬浮框、停靠等,是通过单文档 中 CDockablePane;也可以...
编程实现MFC程序窗口一运行立马隐藏
*MFC实现Hermite曲线,可以运行,有说明文档。
本程序前期使用C++编码实现主要功能,后期使用MFC界面编程完成界面设计;文件里面写有算法描述,在核心代码处都添加了注释,不足之处在于增删网段部分尚有缺陷(主要是CString向Char类型转换时的问题)。 模拟...
获取网络时间校正本地系统时间,C++/MFC源码实现可运行
用VS2008简单实现MFC对话框小程序的托盘运行和单例运行。
程序可以正确运行,是c语言写的,对学习数据结构很有帮助学习mfc很有版主
简单的MFC通信程序的编写,可以实现客户端和服务器之间的数据的单向传输,可以在一台机器上同时运行客户端和服务器程序,观察效果
MFC画图程序,已经调试运行,用鼠标实现直线画图。
纯MFC自己做的小例子,VC6,VS2010都测试过,可以编译运行,放大镜功能完美实现,支持自定义,支持当前鼠标位置放大,和当前放大窗口位置放大,圆形窗口,双缓冲绘图,有悬浮透明提示窗口,改变了传统的放大镜的实现...
MFC 实现复数计算器 包含资源文件和源码 直接用VC 可以加载和运行。。。
MFC实现长按按钮,不断执行某一语句,实现长按功能
1.基于MFC通过多线程实现多个客户端同时连接服务器。 2.服务端通过维护一张转发表来实现对客户端信息的...3.运行程序时先运行服务端,再运行客户端。 4.本程序没有转换编码方式,所以不能传输中文,各位可以自行实现。
用VS 2017的MFC实现客户端和服务器的点对点聊天功能,所有代码在VS 2017中能直接运行,主要实现CAsyncSocket类的编程,包括创建CAsyncSocket对象、建立连接、发送和接收数据等,从CAsyncSocket类派生出自己的WinSock...
输入小球的数量,大小及速度后,点击完成进入运行模态框,点击初始后,点击运行即可
如何用VC++6.0 MFC 实现计算器,很复杂,运行调试一下吧!
编译原理课程设计 MFC实现 编译原理课程设计是迷若烟雨编译原理课程设计的作品,当时分为第5组,因此工程名为BY5. Lib文件夹下是所需的动态连接库。Include是头文件,主要是View类的增强的头文件。 文法在C语言文法...