Tabs C++;,MFC MDI,激活特定选项卡

Tabs C++;,MFC MDI,激活特定选项卡,tabs,mfc,mdi,Tabs,Mfc,Mdi,我有一个MDI MFC应用程序 如果用户尝试打开文档两次,我希望激活正确的选项卡 我迭代CMultiDocTemplate以检查是否打开了相同的文档。因此,我可以找出同一文档是否已经存在,但我找不到“激活”正确选项卡的方法。基本上,您需要迭代所有视图,以找到要激活的视图。以下是实现这一目标的方法: CMDIChildWnd *pChild = (CMDIChildWnd*)GetActiveFrame(); CDocument *pDoc = pChild->GetActiveDocu

我有一个MDI MFC应用程序

如果用户尝试打开文档两次,我希望激活正确的选项卡


我迭代CMultiDocTemplate以检查是否打开了相同的文档。因此,我可以找出同一文档是否已经存在,但我找不到“激活”正确选项卡的方法。

基本上,您需要迭代所有视图,以找到要激活的视图。以下是实现这一目标的方法:

CMDIChildWnd *pChild = (CMDIChildWnd*)GetActiveFrame();  
CDocument *pDoc = pChild->GetActiveDocument();           
POSITION pos = pDoc->GetFirstViewPosition();
while (pos != NULL)
{   
    CView* pView = GetNextView(pos);
    if (viewToActivate)  
        pChild->SetActiveView(pView);                 
}

你真的需要这个吗?我甚至会问,为什么要检查您是否打开了相同的文档。MFC已经为您完成了这项工作。实际上,您不能两次打开同一个文件(除非您能以某种方式愚弄它,例如从不同的共享名或驱动器映射打开它)。而且它确实激活了文档的窗口(至少在MDI儿童案例中-我没有使用选项卡进行测试)。这是我的第一个MFC MDI应用程序。也许我的方法是非常错误的。我拥有的是在线数据(文档)。当用户想要查看特定数据时,我会创建一个新文档,并从服务器请求数据。我试图“打开”文档并覆盖打开函数,但找不到正确的方法。在这种情况下,MFC会知道“文件”是否已经打开。也许我遗漏了一些东西,但在代码的这一部分,您调用GetActiveDocument。可能我要激活的视图不适用于活动文档。我迭代所有打开的视图,找到需要激活的视图,并使用pChild->SetActiveView(pView),但该选项卡未激活。我找到了一个解决方案,但我不喜欢它,那就是获取所有选项卡组(可能不止一个),然后逐个激活选项卡,直到GetActiveDocument返回我要激活的打开的文档