在mfc里面 要实现动态创建类 ,new一个类 为什么要加入相关宏啊?
DECLARE_DYNCREATE(CMsg);IMPLEMENT_DYNAMIC(CMsg,CObject)
我们普通的类 为什么 可以 想new就new啊

解决方案 »

  1.   

    这个作用是“运行时类型识别”,对应的类可以用RUNTIME_CLASS宏得到一个CRuntimeClass结构,可以用IsKindof判断其类型,类似于typeofhttp://blog.csdn.net/52yyp/archive/2009/04/02/4042942.aspx
      

  2.   

    DECLARE_DYNCREATE:表示这个类可以用上面那个CRuntimeClass创建自身,CRuntimeClass * pClass = RUNTIME_CLASS(CMyClass);
    CMyClass * pObj = (CMyClass*)(pClass->CreateObject());
      

  3.   

    还是不明白...这是mfc的机制吗?
      

  4.   

    DECLARE_DYNCREATE(CMsg);
    IMPLEMENT_DYNCREATE(...);DECLARE_DYNAMIC(..);

    IMPLEMENT_DYNAMIC(CMsg,CObject)对应
      

  5.   

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

  6.   

    貌似为了动态生成而做的。如果只知道一个类名为字符串"CString",这怎么new?
      

  7.   

    个人理解:这样做主要是为了让MFC知道类的基类是属于 doc/view/frame/dialog.....也就是使IsKindOf()函数能都识别主要是为了再消息分派时,区别对待
      

  8.   

    好像侯捷的《深入浅出MFC》里面有一章专门讲CRuntimeClass的,你可以去看看
      

  9.   


    你自己没用到是因为你写的类都比较简单,没有太多的继承关系;
    假设你写了一个基类是人,由人又派生出来很多子类:黄种人、白种人、黑人……;派生关系很复杂之后;如果你知道了一个类变量赋值给它的基类,你在其他地方又需要调用这个基类,你还想通过这个基类(人)知道它到底是那个派生类(黄种人?白种人?),你就需要用到这个RUNTIME_CLASS;你在类继承的时候就需要用到那几条宏啦