如何用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() 同时创建框架和视图,而不仅仅只创建视图。
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() 同时创建框架和视图,而不仅仅只创建视图。
相关文章推荐
- 如何编程创建Revit里面的视图过滤器对象
- 如何在其他程序的窗口上创建按钮并使之能响应
- java中如何创建自定义异常Create Custom Exception
- BW--如何创建一个BW的数据源(How to Create a Generic Datasource)
- 如何使用SetWindowRgn函数创建异形窗口
- View视图框架源码分析之一:android是如何创建一个view
- java本地方法如何调用其他程序函数,方法详解
- Revit API批量布置函数doc.Create.NewFamilyInstances();
- JVM最多能创建多少个线程: unable to create new native thread
- 【Android笔记】如何创建列表视图
- 【Android笔记】如何创建列表视图2
- 如何在FireFox中动态创建html元素(createElement)
- MYSQL的基本使用【表的创建和修改、视图、函数、存储过程、触发器和事件调度器】
- 【转】as3中手工创建的MC如何访问父级变量及函数
- 【学习收藏】如何创建只执行一次的工具函数
- android2.3 View视图框架源码分析之一:android是如何创建一个view的?
- Delphi 如何解决在DLL的入口函数中创建或结束线程时卡死
- 如何在某.py文件中调用其他.py内的函数
- CreateNewFrame()跟踪
- mysql-创建函数,存储过程以及视图