【问题标题】:Visual Studio MFC Toolbar Editor icon order won't updateVisual Studio MFC 工具栏编辑器图标顺序不会更新
【发布时间】:2011-09-14 08:31:40
【问题描述】:

我一直在尝试在 Visual Studio 2010 的 MFC 项目中创建自定义工具栏。我一直在关注 Ivan Horton 的《Beginning Visual C++ 2010》中的草图器教程。我遇到的问题是工具栏没有'不更新以反映我创建的图标的顺序和间距。

我创建了一个小屏幕截图来演示该问题:

在后台是带有我想要的工具栏配置的 Visual Studio 工具栏编辑器。前台是实际的应用程序,它不反映我设计的图标的间距或顺序。它确实反映了正在添加的新图标,并且图标工作正常,但我似乎无法让它们重新排序或适当地间隔自己。它们只是按照我创建它们的任何顺序附加到末尾。

我尝试了重启 VS 和 windows 的基本技术,但无济于事。

有什么技巧可以让它很好玩吗?缺少这些,是否有地方可以手动查看或编辑工具栏编辑器生成的代码?

【问题讨论】:

    标签: c++ visual-studio-2010 mfc


    【解决方案1】:

    对于初学者,如果您在 VS.NET 2005 中创建 MFC SDI/MDI 项目,则不会出现此类问题。它发生在 VS.NET 2008 和 2010 中。

    事实上,您对标准工具栏的重新排列确实生效。它只是没有向您显示默认状态。要恢复状态:单击工具栏末尾的小箭头按钮 -> 添加或删除按钮 -> 标准 -> 重置工具栏。

    虽然我不能 100% 确定为什么会这样(这样的设计或错误),但有一种方法可以解决它并且它有效:

    CMainFrame::LoadFrame(...)末尾添加如下代码

    BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext) 
    {
    ...
    
    // Explicitly restore toolbar state
    m_wndToolBar.RestoreOriginalstate();
    
    return TRUE;
    }
    

    我建议您联系 Microsoft 支持工程师,因为网络上的资源很少。

    【讨论】:

    • 谢谢,埃里克。这很好地解释了这一点。
    • 要单击的“重置工具栏”位于应用程序工具栏的下拉菜单中,而不是 Visual Studio 来消除歧义。
    【解决方案2】:

    原因可能是每当您的应用程序启动时,工具栏状态已经从注册表加载。因此框架读取工具栏状态并将新按钮添加到末尾。您的注册表中是否有 Workspace 键,您是否在对工具栏进行更改时尝试将其删除?密钥应位于 HKEY_CURRENT_USER\Software\MyCompany\MyApp\Workspace 等位置

    MyCompany 和 MyApp 的值通常在 InitInstance 中设置。总是调用 RestoreOriginalState() 会破坏代码以允许用户修改工具栏。

    【讨论】:

    • +1 用于解释注册表中的状态。问题是框​​架应该在清理/重建整个解决方案时自动清理注册表项吗?显然,我们不会手动向注册表添加条目。
    • 每当用户安装新版本的软件时,我都会删除安装程序中的注册表状态。好的,它的缺点是用户失去了对 UI 的自定义,但我认为这不是什么大问题。
    • MFC 功能包 (BCG) 还具有将新 UI 元素“集成”到现有状态的功能,但我更喜欢始终从干净状态开始。您可以在这里查看CWinAppEx::CWinAppEx 作为资源智能更新的起点。 (第二条评论,因为我只能在 5 分钟内编辑评论...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2010-09-20
    • 1970-01-01
    • 2019-08-10
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多