防止多文档文档重复打开

16 篇文章 0 订阅
14 篇文章 0 订阅

1调用此函数,程序会自动判断文档是否已经打开,若已经打开则把打开的此文档设为活动文档。

CRadPupApp*pApp=(CRadPupApp*)AfxGetApp();
pApp->OpenDocumentFile(filepath);//调用此函数,程序会自动判断

2、自己写代码判断

void CRadPupApp::OpenFile(LPCTSTR lpszPathName)//OpenFile为自己写的打开函数
{
	POSITION curTemplatePos = GetFirstDocTemplatePosition();
	while(curTemplatePos != NULL)
	{
		CDocTemplate* curTemplate = GetNextDocTemplate(curTemplatePos);
		POSITION posDoc = curTemplate->GetFirstDocPosition();
		while (posDoc!= NULL)
		{
			CRadPupDoc * pDoc = (CRadPupDoc *)curTemplate->GetNextDoc(posDoc);
			if (DocumentExist(pDoc,lpszPathName))///当文档存在的时候就在当前文档打开
			{
				CView * pView = NULL;
				POSITION pos = pDoc->GetFirstViewPosition();
				while (pos)
				{
					pView = pDoc->GetNextView(pos);
					if (pView->IsKindOf(RUNTIME_CLASS(CRadPupView)))
					{
						break;
					}
					else
					{
						pView = NULL;
					}
				}
				if (pView == NULL)
				{
					return ;
				}
				CFrameWnd* pFrame = pView->GetParentFrame();
				pFrame->ActivateFrame();//关键在这句话

				return;
			}
		}
		curTemplate->OpenDocumentFile(lpszPathName);
		return;
	}
}

BOOL CRadPupApp::DocumentExist(CRadPupDoc * pDoc, LPCTSTR lpszPathName)
{
	if (pDoc == NULL)
	{
		return FALSE;
	}
	CString strTitle = pDoc->GetTitle();
	CString strFile = lpszPathName;
	CString strFileTitle = strFile.Right(strFile.GetLength() - strFile.ReverseFind('\\') - 1);
	if (strTitle == strFileTitle)
	{
		return TRUE;
	}
	return 0;
}

 

注:不管是pApp->OpenDocumentFile(filepath)还是curTemplate->OpenDocumentFile(lpszPathName),最终都会调用Doc类的BOOLCRadPupDoc::OnOpenDocument(LPCTSTRlpszPathName),只要在Doc类写打开代码即可。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值