主题:问一个多文档的问题
Eniak
[专家分:0] 发布于 2008-02-25 03:34:00
我想知道,一个通过MFC生成的多文档
1 一个多文档中的CView的实例都是在存放在哪里的?
2 每一次是怎么被生成的,通过那个函数生成的?
回复列表 (共3个回复)
沙发
华山论剑 [专家分:5310] 发布于 2008-02-25 10:43:00
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中
板凳
华山论剑 [专家分:5310] 发布于 2008-02-25 10:45:00
欲有更清晰的理解,请阅读《深入浅出MFC》,仅靠我上面几句,95%以上的可能还是不清楚的。
3 楼
Eniak [专家分:0] 发布于 2008-02-25 22:54:00
你说的这个我看了,BOOL CMdiApp::InitInstance() 这个好像是在整个App实例化的时候才会有。
而且只会被调用一次?是么?我加了断点,以后就进取一次
而且每次我点击那个新生成一个视图的按钮,这个断点就没有进取,我想问一下,其他实例化的字框架都在那里呢?
我来回复