文档|视图|框架产生在下面的语句:
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTestDoc),
RUNTIME_CLASS(CMainFrame),       // main SDI frame window
RUNTIME_CLASS(CTestView));
分别构造文档,视图,框架对象,Windows创建视图和框架窗口,窗口自然会接收到Windows发送的WM_CREATE消息,以便你在OnCreate()里面创建工具条和状态条,至于文档模板的构造而引起文档,视图,框架的产生,详细你可以查看Microsift提供的源代码。

解决方案 »

  1.   

    而没有文档/视图支持的程序,主框架窗口的产生也是用LoadFrame()函数。
      

  2.   

    lgs兄:
         我就是找不到三个类生成的语句,盼详细告之!
      

  3.   

    1.三个类DOC,VIEW,FRAME都是Runtime生成,他们都有一个函数CreateObject(),在头文件和CPP中分别都有DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE的Runtime机制声明,CreateObject的代码就在其中!
    由于CreateObject是CObject就有的,利用继承的机制使使用了上述两个宏的类具有动态产生的特性,其实CreateObject的代码就是return new classname;
    2.对于主框架OnCreate的调用,MDI和SDI没有区别;
      

  4.   

    Holly讲得对,由CRuntimeClass的CreateObject产生。
      

  5.   

    但是
    pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CTestDoc),
    RUNTIME_CLASS(CMainFrame),      // main SDI frame window
    RUNTIME_CLASS(CTestView));
    中的RUNTIME_CALSS返回的只是CRunTimeClass类的地址,难道说此动作引发宏的调用而分别产生
    类对象吗?若是,我怎么在CSingleDocTemplate的构造函数中找不到;若不是,那这三个类对象是
    如何按顺序分别生成的,还请告之
      

  6.   

    cooliu你可以查看RUNTIME_CLASS宏的代码。
      

  7.   

    RUNTIME_CLASS宏只是将三个类的类型存放在CRuntimeClass中,在CDocTemplate中有成员变量保存这三个类!生成的顺序是:(限于SDI)
    CDocTemplate::CreateNewDocument()中先生成Doc的实体;
    CDocTemplate::CreateNewFrame()中生成FrameWnd的实体;
    CFrameWnd::CreateView()中生成View的实体;