在VC多文档中新建指定文档和关闭指定文档
来源:互联网 发布:明道网页版软件 编辑:程序博客网 时间:2024/06/08 08:11
在多文档有时会有这样的需求:能够新建指定的文档并激活,能够关闭指定的文档。我经过研究,得到了下面的一个方法。
这个方法的原理很简单:利用程序的模板管理器,遍历所有模板中的所有文档,如果发现与条件对应的文档则激活或者关闭,否则则新建文档。
直接看代码吧。
一、新建或激活
void CXXX::OpenFile(const CString &szTitle)
{
CMultiDocTemplate* pTemplate;
POSITION docPos = NULL;
POSITION pos = m_pDocManager->GetFirstDocTemplatePosition();
while (pos)
{
pTemplate = (CMultiDocTemplate*)m_pDocManager->GetNextDocTemplate(pos);
docPos = pTemplate->GetFirstDocPosition();
while (docPos != NULL)
{
CTestDoc* pDoc = (CTestDoc*)pTemplate->GetNextDoc(docPos);
CString szTitle = pDoc->GetTitle();
if (szTitle.Compare(szTitle) == 0)
{
pDoc->m_Frame->ActivateFrame();
return;
}
}
}
CTestDoc* pDoc = new CTestDoc(szTitle);
pDoc->m_Frame = (CFrameWndEx*)pTemplate->CreateNewFrame(pDoc,NULL);
pTemplate->AddDocument(pDoc);
pTemplate->InitialUpdateFrame(pDoc->m_Frame,pDoc);
}
二、关闭
void CXXX::ColseFile(const CString &szTitle)
{
POSITION docPos = NULL;
POSITION pos = m_pDocManager->GetFirstDocTemplatePosition();
while (pos != NULL)
{
CMultiDocTemplate* pTemplate = (CMultiDocTemplate*)m_pDocManager->GetNextDocTemplate(pos);
docPos = pTemplate->GetFirstDocPosition();
while (docPos != NULL)
{
CTestDoc* pDoc = (CTestDoc*)pTemplate->GetNextDoc(docPos);
CString szTitle = pDoc->GetTitle();
if (szTitle.Compare(szTitle) == 0)
{
pDoc->m_Frame->DestroyWindow();
// pTemplate->RemoveDocument(pDoc);
// delete pDoc;
return;
}
}
}
}
或者:
BOOL CMainFrame::ColseFile(const CString &szTitle)
{
// HWND hWndVideo;
// hWndVideo = GetDlgItem(MEDIAMonitor_VideoShow)->m_hWnd;
//CChildFrame childfra;
// HWND hwnd = ::FindWindow(childfra, LoadString(MEDIAMonitor_VideoShow));
// int X = ::IsWindowEnabled(hwnd);
POSITION docPos = NULL;
CClientApp *m_pDocManager = (CClientApp*)AfxGetApp(); //得到应用程序指针
POSITION pos = m_pDocManager->GetFirstDocTemplatePosition();
while (pos != NULL)
{
CMultiDocTemplate* pTemplate = (CMultiDocTemplate*)m_pDocManager->GetNextDocTemplate(pos);
docPos = pTemplate->GetFirstDocPosition();
while (docPos != NULL)
{
CDocument* pDoc = (CDocument*)pTemplate->GetNextDoc(docPos);
CString szMyTitle = pDoc->GetTitle();
if (szMyTitle.Compare(szTitle) == 0)
{
pDoc->OnCloseDocument();
/*pDoc->PreCloseFrame(this);*/
//DestroyWindow();
//MDIGetActive()->PostMessage(WM_CLOSE);
/*hwnd->PostMessage(WM_CLOSE);*/
//pDoc->m_Frame->DestroyWindow();
// pTemplate->RemoveDocument(pDoc);
// delete pDoc;
return TRUE;
}
}
}
return false;
}
在这其中有两个关键点:
第一、文档内需要亲新建一个CFrameWnd类的指针
第二、在新建文档后需要把新建的文档加入到文档模板管理器中。
void CMainFrame::OnCloseWindow() { CMDIChildWnd* child = MDIGetActive(); while (child) { child->MDIDestroy(); child = MDIGetActive(); }}
- 在VC多文档中新建指定文档和关闭指定文档
- 在文档库中向指定的文件夹添加文档
- 在多文档程序中给视图指定标题信息
- 在多个Word文档中查找指定文件内容
- 在html文档/指定标签中输出时间
- mfc 打开指定文档
- 从数据库中取出指定文档
- 如何在关闭应用程序时自动保存文档到指定名称的文件
- 【Java】获取指定HTML 文档指定的body、页中超链接的标题和链接、指定博客文章的内容
- VC单文档多视图工程中,在任何地方访问某一指定视图类的方法
- 获取指定文档中的邮件地址
- DOC文档视图状态指定
- 提取文档中的指定内容
- 关于WM中MFC单文档界面“新建”菜单和关闭按钮的处理
- C#中操作Word(2)—— 新建、打开、保存和关闭文档
- C#中操作Excel(2)—— 新建、打开、保存和关闭Excel文档
- 在VC++中读写XML文档
- C#在Word文档指定位置处理表格
- poj-2479 简单DP
- JS面试题及答案
- Hello CSDN Blog!
- 两个View同步滚动
- 在浏览器中检查是否安装jre
- 在VC多文档中新建指定文档和关闭指定文档
- 如何利用VS2010安装和部署应用程序
- fgets()、gets()、EOF、feof()
- [leetcode刷题系列]ZigZag Conversion
- NullPointerException_1
- 遍历聚合对象中的元素——迭代器模式(六)
- 使用C语言将数据写成Grads格式的代码示例
- C#多线程学习(一) 多线程的相关概念
- Android系统五大布局详解Layout