回 帖 发 新 帖 刷新版面

主题:问一个多文档的问题

我想知道,一个通过MFC生成的多文档
1 一个多文档中的CView的实例都是在存放在哪里的?

2 每一次是怎么被生成的,通过那个函数生成的?

回复列表 (共3个回复)

沙发


1、对于一个MFC的MDI程序,视图的生成首先在Application的InitInstance中要注册,假如View的文件名为CMdiView:

[code=c]
BOOL CMdiApp::InitInstance()
{
    ......
    // Register document templates

    CMultiDocTemplate* pDocTemplate;
    pDocTemplate = new CMultiDocTemplate(
        IDR_MDISQUTYPE,
        RUNTIME_CLASS(CMdiDoc),
        RUNTIME_CLASS(CChildFrame), // 子窗口frame
        RUNTIME_CLASS(CMdiView));   // 这是顶层窗口的View
    AddDocTemplate(pDocTemplate);
    ....

[/code]

这样,每生成一个新文件,就动态建立相应的子窗口视图,如上面的RUNTIME_CLASS(CChildFrame)。

2、视图的生成是靠几个宏:

    DECLARE_DYNCREATE(CMdiView)
    IMPLEMENT_DYNCREATE(CMdiView, CView)
    

视图相关信息从源程序角度来说保存在CMdiViewh和CMdiView.cpp中

板凳

欲有更清晰的理解,请阅读《深入浅出MFC》,仅靠我上面几句,95%以上的可能还是不清楚的。

3 楼

你说的这个我看了,BOOL CMdiApp::InitInstance() 这个好像是在整个App实例化的时候才会有。

而且只会被调用一次?是么?我加了断点,以后就进取一次

而且每次我点击那个新生成一个视图的按钮,这个断点就没有进取,我想问一下,其他实例化的字框架都在那里呢?

我来回复

您尚未登录,请登录后再回复。点此登录或注册