我创建了一个使用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; }
};
这是我可以用来向工具栏或菜单栏添加动态项目的唯一方法,但这不是一个解决方案,我没有利用自定义工具和保存菜单栏位置,这是微软想要的方式人们处理菜单和工具栏?推它一次,不允许任何变化?或者我对此遗漏了什么?
答案 0 :(得分:0)
不幸的是,自从Microsoft从BCG工具包派生CMFC类以来,这就是它的工作方式。我们在应用程序中遇到了同样的问题,并通过从大型机类更新工作空间(例如工具栏,菜单项等)来解决它。此外,我们选择将状态保存在XML文件中。