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 中的每个选项卡附加不同的对话框