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

Posted

技术标签:

【中文标题】C++,MFC MDI,激活特定选项卡【英文标题】:C++, MFC MDI, activate specific tab 【发布时间】:2018-06-25 14:23:58 【问题描述】:

我有一个 MDI MFC 应用程序。

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

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

【问题讨论】:

你真的需要这个吗?我什至会质疑为什么要检查您是否打开了相同的文档。 MFC 已经为您完成了这项工作。您实际上不能两次打开同一个文件(除非您能以某种方式欺骗它,例如从不同的共享名或驱动器映射打开它)。它确实激活了文档的窗口(至少在 MDI 儿童案例中 - 我没有使用标签进行测试)。 嗨。这是我的第一个 MFC MDI 应用程序。也许我的方法是非常错误的。我拥有的是在线数据(文档)。当用户想要查看特定数据时,我创建一个新文档,并从服务器请求数据。我尝试“打开”文档并覆盖打开功能,但我找不到正确的方法。在这种情况下,MFC 会知道“文件”是否已经打开。 【参考方案1】:

基本上,您需要迭代所有视图才能找到您想要激活的视图。方法如下:

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

【讨论】:

也许我遗漏了一些东西,但在这部分代码中,您调用了 GetActiveDocument。也许我要激活的视图不适用于活动文档。我迭代所有打开的视图并找到我需要激活并使用 pChild->SetActiveView(pView) 但选项卡未激活的视图。我找到但我不喜欢的解决方案是获取所有选项卡组(可能不止一个),然后逐个激活选项卡,直到 GetActiveDocument 返回我要激活的打开文档

以上是关于C++,MFC MDI,激活特定选项卡的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ MFC 中使用 EnableMDITabbedGroups 时如何保持文档 Tab 键顺序

C++ MFC 为 CTabCtrl 中的每个选项卡附加不同的对话框

如何从MFC选项卡控件(TabCtrl)获取额外数据?

JQuery选项卡 - 嵌套选项卡的问题 - 在初始加载时激活子选项卡

如何链接到页面并使用 Rails 激活特定选项卡

JQuery选项卡 - 嵌套选项卡问题 - 在初始加载时激活子选项卡