欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 【MFC】多工具栏如何保存状态(续)

【MFC】多工具栏如何保存状态(续)

2025/9/15 6:04:07 来源:https://blog.csdn.net/XZHOUMIN/article/details/144734669  浏览:    关键词:【MFC】多工具栏如何保存状态(续)

之前我写过一篇:
【MFC】多工具栏如何保存状态
其中的方法有点无奈,经过我最新的研究,有了更好的方法。现在分享给大家。
系统中保存状态是通过:
pToolBar->LoadState(strSection);来实现
我原来的方法是绕过,现在考虑若修改LoadState这个函数不就直接解决了问题了。有了这个思路就好办了,我们可以用C++的3大特性之一继承来做这个事情。
从CMFCToolBar继承后做一个新的类,实现LoadState函数。
如下:

BOOL CMyToolBar::LoadState(LPCTSTR lpszProfileName, int nIndex, UINT uiID)
{return CMFCToolBar::LoadState(lpszProfileName, nIndex, m_uiResID);
}

但这个ID从哪里来呢,因此还需要实现一个成员变量m_uiResID,在加载工具条时保存下来。

BOOL CMyToolBar::LoadToolBar(UINT uiResID, UINT uiColdResID, UINT uiMenuResID, BOOL bLocked,UINT uiDisabledResID, UINT uiMenuDisabledResID, UINT uiHotResID){m_uiResID = uiResID;return CMFCToolBar::LoadToolBar(uiResID, uiColdResID, uiMenuResID, bLocked,uiDisabledResID, uiMenuDisabledResID, uiHotResID);}

保存时也做类似处理

BOOL CMyToolBar::SaveState(LPCTSTR lpszProfileName, int nIndex, UINT uiID)
{return CMFCToolBar::SaveState(lpszProfileName, nIndex, m_uiResID);
}

最终我们看到在注册表中
在这里插入图片描述
工具栏的数量大幅减少,其中红框的是我们加的扩展工具栏保存的状态数据,绿框是两个菜单栏的状态数据,蓝框是标准工具栏就是MFC默认工具栏的状态保存数据。
其中pane和basepane对应的数字是工具栏的父类和祖类的保存的状态数据,通过数字一一对应。
其中数字的含义上一篇已经讲过了。

但菜单中的显示/隐藏子菜单问题还没有解决。
具体代码可以见绑定的资源。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词