文档模板是一个特殊的对象,它帮助MFC动态地创建并联合-->文档、视图和视图框架CMultiDocTemplate * pDocTemplate;//文档模板
pDocTemplate = new CmultiDocTemplate(
    IDR_MMYDOCTYPE,             //资源ID
    RUNTIME_CLASS(CMyDoc),      //文档
    RUNTIME_CLASS(CChildFrame), //视图的框架窗口
    RUNTIME_CLASS(CMyView));    //视图
AddDocTemplate(pDocTemplate);
为什么不可以这样用呢? 以下也可以说是动态生成对象的呀
pDocTemplate1 = new CMyDoc;
pDocTemplate2 = new CChildFrame;
pDocTemplate3 = new CMyView;用RUNTIME_CLASS的好处在那???

解决方案 »

  1.   

    这涉及到动态生成的问题,看看《深入浅出MFC》吧,解释地很详细。
      

  2.   

    CMyView *pView= new CMyView;生成的是类的一个对象;
    而RUNTIME_CLASS(CMyView)生成的是一个类对象
      

  3.   

    推荐《看深入浅出MFC》,如果嫌贵的话这里可以下载
    http://wlbookwl.myrice.com/vcbook.htm#mfcsyqc
      

  4.   

    有个类CRuntimeClass,用来支持运行时类型信息(RTTI)。
    MFC里面的CObject以及它的子类通过宏DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC支持运行时类型信息——每个类有一个静态的CRuntimeClass对象变量,在IMPLEMENT_DYNAMIC宏里面把各个类对应的CRuntimeClass静态对象变量用链表形式串起来(具体怎么实现可以看《看深入浅出MFC》)
      

  5.   

    RUNTIME_CLASS()作用在类名上面,得到对应类的CRuntimeClass静态成员对象的地址
    CRuntimeClass通过函数指针CObject* (PASCAL* m_pfnCreateObject)()支持动态创建对象(必须有缺省形式的构造函数)
      

  6.   

    文档模板是个三元组,他是mvc(model-view-contrl)的一种实现,为了降低彼此之间的耦合性。
      

  7.   

    看<深入浅出MFC>
    ***************************
    *            .-'''''-.    *
    *          .'         `.  *
    *         :             : *
    *        :               :*
    *        :      _/|      :*
    *         :   =/_/      : *
    *          `._/ |     .'  *
    *       (   /  ,|...-'    *
    *        \_/^\/||__       *
    *     _/~  `""~`"` \_     *
    *  __/  -'/  `-._ `\_\__  *
    */     /-'`  `\   \  \-.\ *
    ***************************
      

  8.   

    《深入浅出MFC》中说得很明白