【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对应的数字是工具栏的父类和祖类的保存的状态数据,通过数字一一对应。

其中数字的含义上一篇已经讲过了。

但菜单中的显示/隐藏子菜单问题还没有解决。

具体代码可以见绑定的资源。

相关推荐
AI视觉网奇7 小时前
Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr
开发语言·c++·算法
智者知已应修善业7 小时前
【输入两个数字,判断两数相乘是否等于各自逆序数相乘】2023-10-24
c语言·c++·经验分享·笔记·算法·1024程序员节
oioihoii7 小时前
C++11到C++23语法糖万字详解
java·c++·c++23
比昨天多敲两行7 小时前
C++入门基础
开发语言·c++
集3047 小时前
C++多线程学习笔记
c++·笔记·学习
ComputerInBook8 小时前
C++编程语言:标准库:第39章——本地化(语言环境)( Locales)(Bjarne Stroustrup)
c++·c++语言环境·c++ 本地化设置·c++ locale·c++ facet·语言特征
繁华似锦respect9 小时前
C++ 智能指针底层实现深度解析
linux·开发语言·c++·设计模式·代理模式
Bona Sun10 小时前
单片机手搓掌上游戏机(二十三)—esp32运行简单街机模拟器软硬件准备
c语言·c++·单片机
@小码农11 小时前
2025年北京海淀区中小学生信息学竞赛第二赛段C++真题
开发语言·数据结构·c++·算法
sulikey11 小时前
C++模板初阶详解:从函数模板到类模板的全面解析
开发语言·c++·模板·函数模板·类模板