---------------大家帮帮忙啊-----------mfc动态创建类的问题。。。。。。。

wing_0706 2011-04-13 09:50:24
在mfc里面 要实现动态创建类 ,new一个类 为什么要加入相关宏啊?
DECLARE_DYNCREATE(CMsg);



IMPLEMENT_DYNAMIC(CMsg,CObject)


我们普通的类 为什么 可以 想new就new啊。。。
...全文
273 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wing_0706 2011-04-28
  • 打赏
  • 举报
回复
谢谢。。。。。。
hideforever 2011-04-13
  • 打赏
  • 举报
回复
运行时类型识别
King_hhuang 2011-04-13
  • 打赏
  • 举报
回复
DECLARE_DYNCREATE:表示这个类可以用上面那个CRuntimeClass创建自身,

CRuntimeClass * pClass = RUNTIME_CLASS(CMyClass);
CMyClass * pObj = (CMyClass*)(pClass->CreateObject());
King_hhuang 2011-04-13
  • 打赏
  • 举报
回复
这个作用是“运行时类型识别”,对应的类可以用RUNTIME_CLASS宏得到一个CRuntimeClass结构,可以用IsKindof判断其类型,类似于typeof

http://blog.csdn.net/52yyp/archive/2009/04/02/4042942.aspx
无水先生 2011-04-13
  • 打赏
  • 举报
回复
用处多了
请看侯捷的书去,解释的非常好
King_hhuang 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wing_0706 的回复:]
引用 5 楼 visualeleven 的回复:
DECLARE_DYNCREATE(CMsg);和
IMPLEMENT_DYNCREATE(...);

DECLARE_DYNAMIC(..);

IMPLEMENT_DYNAMIC(CMsg,CObject)对应

为什么mfc中要这些啊..我们平时的c++类 可以随便new啊.. 这点很不理解 啊
[/Quote]

你自己没用到是因为你写的类都比较简单,没有太多的继承关系;
假设你写了一个基类是人,由人又派生出来很多子类:黄种人、白种人、黑人……;派生关系很复杂之后;如果你知道了一个类变量赋值给它的基类,你在其他地方又需要调用这个基类,你还想通过这个基类(人)知道它到底是那个派生类(黄种人?白种人?),你就需要用到这个RUNTIME_CLASS;你在类继承的时候就需要用到那几条宏啦
King_hhuang 2011-04-13
  • 打赏
  • 举报
回复
好像侯捷的《深入浅出MFC》里面有一章专门讲CRuntimeClass的,你可以去看看
  • 打赏
  • 举报
回复
也就是MFC的RTTI机制
  • 打赏
  • 举报
回复
个人理解:

这样做主要是为了让MFC知道类的基类是属于 doc/view/frame/dialog.....

也就是使IsKindOf()函数能都识别

主要是为了再消息分派时,区别对待
j8daxue 2011-04-13
  • 打赏
  • 举报
回复
貌似为了动态生成而做的。如果只知道一个类名为字符串"CString",这怎么new?
wing_0706 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 visualeleven 的回复:]
DECLARE_DYNCREATE(CMsg);和
IMPLEMENT_DYNCREATE(...);

DECLARE_DYNAMIC(..);

IMPLEMENT_DYNAMIC(CMsg,CObject)对应
[/Quote]
为什么mfc中要这些啊..我们平时的c++类 可以随便new啊.. 这点很不理解 啊
Eleven 2011-04-13
  • 打赏
  • 举报
回复
DECLARE_DYNCREATE(CMsg);
IMPLEMENT_DYNCREATE(...);

DECLARE_DYNAMIC(..);

IMPLEMENT_DYNAMIC(CMsg,CObject)对应
wing_0706 2011-04-13
  • 打赏
  • 举报
回复
还是不明白...

这是mfc的机制吗?

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧