如何用CreateNewFrame() 函数创建其他视图

CDocTemplate::CreateNewFrame() 函数在使用MFC编写的多文档应用程序(MDI)中为文档(Document)创建其他视图(Views),CreateNewFrame() 函数原型如下:

CFrameWnd * CDocTemplate::CreateNewFrame(CDocument *, CFrameWnd *)

要调用该函数,需要指定一个CDocument 对象指针(确定函数将要创建什么视图)和一个框架窗口指针(用于复制该窗口的属性),一般第二个参数为NULL
当应用程序调用CreateNewFrame() ,该函数创建一个新的框架窗口,并在该窗口中创建一个视图。

为了更好地理解如何使用CreateNewFrame(),可以看看下面两个例子。
第一个例子是MFC源代码中的WINMDI.CPP文件。WINMDI.CPP 定义了CMIDFrameWnd::OnWindowNew()函数,该函数调用CreateNewFrame() 用于为一个指定的文档添加其他的框架和视图。每次当用户选择New菜单时,应用程序调用OnWindowNew()
OnWindowNew()
函数包含如下两行重要的代码:

CFrameWnd * pFrame = pTemplate->CreateNewFrame(pDocument, pActiveChild);
pTemplate->InitialUpdateFrame(pFrame, pDocument);

该代码创建并显示新框架窗口和文档视图。
另一个例子是MFC源代码中的DOCMULTI.CPP文件。CMultiDocTemplate::OpenDocumentFile()函数包含下列代码:

CFrameWnd * pFrame = CreateNewFrame(pDocument, NULL);

注意:第二个参数是NULL 是因为OpenDocumentFile() 函数的设计假设程序员对复制包含该文档视图的其他框架不感兴趣。
CHKBOOK
例子也示范了如何为文档创建附加框架和视图,在 CHKBOOK.CPP中, CChkBookApp::OpenDocumentFile() 函数包含下列代码:

CChkBookDoc * pDoc = (CChkBookDoc*)CWinApp::OpenDocumentFile(lpszFileName);
if (pDoc == NULL)

return NULL;
//The line below is not required.
CMDIChildWnd * pframe = ((CMDIFrameWnd *)AfxGetApp()->m_pMainWnd)->MDIGetActive();
CFrameWnd * pNewFrame = m_pCheckViewTemplate->CreateNewFrame(pDoc, NULL);
if (pNewFrame == NULL)

return pDoc;
m_pCheckViewTemplate->InitialUpdateFrame(pNewFrame, pDoc);

当你使用CreateNewFrame()时有两点需要考虑:

一、CDocTemplate::CreateNewFrame()的源代码是在DOCTEMPL.CPP中,它包含下列代码:

if (!pFrame->LoadFrame(m_nIDResource,

WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, // default frame styles

NULL, &context)

由于上述代码创建框架窗口时父窗口为NULL MFC使用应用程序主窗口作为其父窗口。

二、CreateNewFrame() 同时创建框架和视图,而不仅仅只创建视图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值