【问题标题】:CMFCToolBar & CMFCMenuBar don't show dynamic items by defaultCMFCToolBar & CMFCMenuBar 默认不显示动态项
【发布时间】:2014-03-17 22:49:02
【问题描述】:

我创建了一个使用 CMFCToolBar 和 CMFCMenuBar 的 MFC 应用程序。它保存了它的第一次项目状态,当我更改或添加任何动态项目时,我仍然看到第一个状态删除的项目停留在那里添加的项目没有显示,然后我发现所有项目都在注册表中序列化并每次加载,我们所有的应用程序都从应用程序的模块中加载动态菜单项或工具栏按钮,除了以下解决方案,我真的无法让它工作

class CToolBarEx : public CMFCToolBar
{
public:
    CToolBarEx()
    {
    }

    virtual BOOL LoadState(LPCTSTR /*lpszProfileName*/ = NULL, int /*nIndex*/ = -1, UINT /*uiID*/ = (UINT) -1)  {   return FALSE;   }
    virtual BOOL SaveState(LPCTSTR /*lpszProfileName*/ = NULL, int /*nIndex*/ = -1, UINT /*uiID*/ = (UINT) -1)  {   return FALSE;   }


};
class CMenuBarEx : public CMFCMenuBar
{
public:
    CToolBarEx()
    {
    }

    virtual BOOL LoadState(LPCTSTR /*lpszProfileName*/ = NULL, int /*nIndex*/ = -1, UINT /*uiID*/ = (UINT) -1)  {   return FALSE;   }
    virtual BOOL SaveState(LPCTSTR /*lpszProfileName*/ = NULL, int /*nIndex*/ = -1, UINT /*uiID*/ = (UINT) -1)  {   return FALSE;   }


};

这是我可以用来向工具栏或菜单栏添加动态项目的唯一方法,但这不是解决方案,我没有利用自定义工具并保存菜单栏位置,这就是微软想要的人们处理菜单和工具栏?推送一次并且不允许更改?或者我错过了什么?

【问题讨论】:

    标签: c++ dynamic mfc cmfctoolbar


    【解决方案1】:

    不幸的是,这就是它的工作方式,因为 Microsoft 从 BCG 工具包派生了它的 CMFC 类。我们在我们的应用程序中遇到了同样的问题,并通过从 ma​​inframe 类更新工作空间(例如工具栏、菜单项等)来解决它。此外,我们选择将状态保存在 XML 文件中。

    【讨论】:

    • 如何保存状态是什么状态??它现在将其保存在注册表中并加载它,但看不到任何更新。我只是想让它看到更新新的变化,如果你已经解决了这个问题,请让答案更清楚,并为我们提供一些代码或指南
    • “状态”是当前定义给应用程序的所有工具栏、菜单等的当前定位和包含。您可以将其视为“个人资料”。你可以有许多不同的“状态”。可以定义一个来保存工具栏的子集。每当添加、更新工具栏等时,我们都会调用 savestate 方法来保存“状态”。打开应用程序时,使用 loadstate 方法恢复状态。当它关闭时,状态会再次保存。您可以自行决定如何以及何时管理应用程序中用户界面对象的状态。
    猜你喜欢
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多