【问题标题】:MFC: How to save the position of toolbars in the legacy MFC ver 6?MFC:如何在旧版 MFC 版本 6 中保存工具栏的位置?
【发布时间】:2016-01-25 16:37:01
【问题描述】:

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

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

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

感谢任何帮助,非常感谢!

问候,

托马斯

【问题讨论】:

    标签: c++ winapi mfc toolbar state


    【解决方案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);
    }
    

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

    【讨论】:

    • 嗨 Thomiel,是的,我虽然将工具栏彼此相邻放置会接近理想,所以我从另一个论坛中提取了解决方案。它本质上并不能解决我跨会话(在注册表或 INI 文件中)保存布局的问题,但就像我说的那样,它已经足够接近了。我至少赞成你的回答;-)
    猜你喜欢
    • 2012-07-29
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多