您的位置:首页 > 其它

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

2008-08-05 16:56 465 查看
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() 同时创建框架和视图,而不仅仅只创建视图。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: