mfc的MDI中怎样切换活动的文档视图

天上的猩猩Y 2016-04-14 05:44:51
小弟现在要实现一个功能,如下图所示:

在1中点击Screen0,然后2中的视图如果视图Screen0存在,则激活Screen0窗口,如果不存在这新建一个Screen0窗口并显示。请问这个功能该怎么弄?
...全文
271 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhang12yu3 2019-01-15
  • 打赏
  • 举报
回复
你的串口工具栏不错,单独写得类,还是在原有的基础上做的,能学习一下不
赵4老师 2016-04-15
  • 打赏
  • 举报
回复
引用 6 楼 qq_23992597 的回复:
[quote=引用 5 楼 zhao4zhong1 的回复:] 参考 Codejock.Xtreme.Suite.Pro.ActiveX 源代码?
请问大哥有没有这个的源码,我百度半天,都是安装程序,找不到源码[/quote] 搜“Codejock.Xtreme.Toolkit.Pro.v15.3.1.Full.Source.Retail.Incl.Keymaker-ZWT.rar”试试看。
天上的猩猩Y 2016-04-15
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
参考 Codejock.Xtreme.Suite.Pro.ActiveX 源代码?
请问大哥有没有这个的源码,我百度半天,都是安装程序,找不到源码
赵4老师 2016-04-15
  • 打赏
  • 举报
回复
参考 Codejock.Xtreme.Suite.Pro.ActiveX 源代码?
天上的猩猩Y 2016-04-15
  • 打赏
  • 举报
回复
引用 1 楼 qq_23992597 的回复:
现在小弟已经实现了,如果2中没有1中的视图,创建一个新视图的功能。但是激活功能还是一头雾水,百度N就也没找到类似答案!求各位帮帮忙,提点一下!

CDocManager * pDocManager = AfxGetApp()->m_pDocManager;
 	POSITION posDocManager = pDocManager->GetFirstDocTemplatePosition();
 	while(posDocManager != NULL)
 	{
 		CDocTemplate * pDocTemplate = (CDocTemplate *)pDocManager->GetNextDocTemplate(posDocManager);
 		POSITION posDoc = pDocTemplate->GetFirstDocPosition();
 		
 		while(posDoc != NULL)
 		{
 			CDocument * pDoc = pDocTemplate->GetNextDoc(posDoc);		
 
 			if (pDoc->GetTitle() == szName)
 			{	
 				POSITION posView = pDoc->GetFirstViewPosition();
 				
 				while (posView != NULL)
 				{
 					CView * pView = pDoc->GetNextView(posView);
  					CMainFrame * pMainFrame = (CMainFrame *)AfxGetMainWnd();
  					pMainFrame->SetActiveView(pView);					
 				}
 			}
 		}
 	}


大哥,这是我的实现代码,但是它并不能激活所对应的视图,能帮我看看问题在哪吗?谢谢!
天上的猩猩Y 2016-04-15
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
通过文档模板-文档枚举窗口视句柄 http://blog.csdn.net/zgl7903/article/details/5978120 枚举文档, CDocument::GetTitle 对比标题栏, CFrameWnd::SetActiveView CDocTemplate::CreateNewFrame

CDocManager * pDocManager = AfxGetApp()->m_pDocManager;
 	POSITION posDocManager = pDocManager->GetFirstDocTemplatePosition();
 	while(posDocManager != NULL)
 	{
 		CDocTemplate * pDocTemplate = (CDocTemplate *)pDocManager->GetNextDocTemplate(posDocManager);
 		POSITION posDoc = pDocTemplate->GetFirstDocPosition();
 		
 		while(posDoc != NULL)
 		{
 			CDocument * pDoc = pDocTemplate->GetNextDoc(posDoc);		
 
 			if (pDoc->GetTitle() == szName)
 			{	
 				POSITION posView = pDoc->GetFirstViewPosition();
 				
 				while (posView != NULL)
 				{
 					CView * pView = pDoc->GetNextView(posView);
  					CMainFrame * pMainFrame = (CMainFrame *)AfxGetMainWnd();
  					pMainFrame->SetActiveView(pView);					
 				}
 			}
 		}
 	}

大哥,这是我的实现代码,但是它并不能激活所对应的视图,能帮我看看问题在哪吗?谢谢!
zgl7903 2016-04-15
  • 打赏
  • 举报
回复
通过文档模板-文档枚举窗口视句柄 http://blog.csdn.net/zgl7903/article/details/5978120 枚举文档, CDocument::GetTitle 对比标题栏, CFrameWnd::SetActiveView CDocTemplate::CreateNewFrame
天上的猩猩Y 2016-04-15
  • 打赏
  • 举报
回复
感谢两位大哥的回答,现在问题就已经解决!马上结贴!
天上的猩猩Y 2016-04-14
  • 打赏
  • 举报
回复
现在小弟已经实现了,如果2中没有1中的视图,创建一个新视图的功能。但是激活功能还是一头雾水,百度N就也没找到类似答案!求各位帮帮忙,提点一下!

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧