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

时间:2016-01-24 10:17:57

标签: c++ winapi mfc toolbar state

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

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

  • (a)奇怪的是保存工具栏,以便在恢复时没有按钮(只有最小尺寸,这意味着无按钮事实)。
  • (b)当我将两个工具栏彼此相邻并关闭应用程序时,它们会在恢复时显示在彼此之下(这是我想要避免的)。我理解这可能是错误地保存状态的结果,正如(a)中所述。

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

此致

托马斯

1 个答案:

答案 0 :(得分:1)

在切换到功能区之前,我使用this CodeProject article中的这个功能来安排我的工具栏:

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);
}

我确定,您可以轻松地使用它来保存和加载代码以恢复工具栏。