gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:40:51 29 4
gpt4 key购买 nike

VS2010 采用 MDI 文档布局,使用顶部的选项卡在文档之间进行切换。每个文档都是数据库的“实时” View ,其中每个文档的持久数据是一组配置设置。

我们希望允许用户重新排列选项卡(此功能是内置的),但需要保留此新顺序。现在看来,移动选项卡不会影响文档的 z 顺序。关闭应用程序时,文档会按照打开的顺序关闭,因此这对于确定关闭时的最终 Tab 键顺序没有帮助。

我们使用 EnableMDITabbedGroups(TRUE, mdiTabParams) 和默认的 m_bEnableTabSwap = TRUE

最佳答案

谢谢!最终在 MainFrame::OnClose() 方法中得到以下解决方案。

请注意,此代码示例使用两个自定义类:1) CSpectraAnalysisUtilityView,它继承自 CView;2) CReviewDataFolder,它是我们更新最近的 Tab 键顺序所需的对象。

此代码解决方案还实现了 GetMDITabGroups,以防打开多个组窗口。

void CMainFrame::OnClose()
{
iReviewDataFolderOrder = 1;

const CObList& tabGroups =m_wndClientArea.GetMDITabGroups();
if (0 < tabGroups.GetCount())
{
POSITION pos = tabGroups.GetHeadPosition();
CMFCTabCtrl* pCrtTabCtrl;

while(pos != NULL)
{
pCrtTabCtrl=DYNAMIC_DOWNCAST(CMFCTabCtrl, tabGroups.GetNext(pos));

int count = pCrtTabCtrl->GetTabsNum();
for(int i = 0; i < count; i++)
{
CWnd* pWnd = pCrtTabCtrl->GetTabWndNoWrapper(i);
CMDIChildWnd *pChild = ((CMDIChildWnd*)(pWnd));
if (pChild)
{
CView *pView = pChild->GetActiveView();
if (pView)
{
if (pView->IsKindOf(RUNTIME_CLASS(CSpectraAnalysisUtilityView)))
{
CSpectraAnalysisUtilityView* specUtilView;

specUtilView = (CSpectraAnalysisUtilityView*)pView;
CReviewDataFolder* pDataFolder = specUtilView->GetSpecReviewDataFolder();
if(pDataFolder)
{
pDataFolder->SetRecentOrder(iReviewDataFolderOrder);
iReviewDataFolderOrder++;
}
}
}
}
}
}
}
CMDIFrameWnd::OnClose();
}

关于c++ - 在 C++ MFC 中使用 EnableMDITabbedGroups 时如何保留文档 Tab 键顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42494840/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com