MFC:如何在旧版 MFC 版本 6 中保存工具栏的位置

MFC: How to save the position of toolbars in the legacy MFC ver 6?

本文关键字:MFC 保存 工具栏 位置 版本      更新时间:2023-10-16

我有一个引人注目的问题:如何在旧版 MFC ver 6 中保存工具栏的位置?

我不能使用CWinApp::SaveBarState因为目前并非所有工具栏都存在此函数(导致其断言)。相反,我根据加载的文档类型实例化工具栏。不幸的是,我还没有找到CToolBarCtrl::SaveState理想的方式,我想。但是,在玩它时,我遇到了两个问题:

  • a)它奇怪地保存了工具栏,以便在恢复时,它没有按钮(只有最小的尺寸,这意味着没有按钮的事实)。
  • (b) 当我将两个工具栏并排放置并关闭应用程序时,它们在恢复时会显示在彼此下方(这是我想要避免的)。我知道这可能是错误地拯救国家的结果,正如(a)中所述。

任何帮助之手表示赞赏,非常感谢!

问候

托马斯

在切换到功能区之前,我使用了这篇 CodeProject 文章中的这个功能来排列我的工具栏:

void CMainFrame::DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf)
{
    CRect rect;
    DWORD dw;
    UINT n;
    // get MFC to adjust the dimensions of all docked ToolBars
    // so that GetWindowRect will be accurate
    RecalcLayout(TRUE);
    LeftOf->GetWindowRect(&rect);
    rect.OffsetRect(1,0);
    dw=LeftOf->GetBarStyle();
    n = 0;
    n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
    n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
    n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
    n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;
    // When we take the default parameters on rect, DockControlBar will dock
    // each Toolbar on a seperate line. By calculating a rectangle, we
    // are simulating a Toolbar being dragged to that location and docked.
    DockControlBar(Bar,n,&rect);
}

我敢肯定,您可以轻松地将其用于保存和加载代码以恢复工具栏。