CRegSettings - 注册表帮助类






4.97/5 (15投票s)
2002年9月20日
3分钟阅读

100498

2521
用于将应用程序设置存储在注册表中的简单类。
引言
使用 Win32 API 甚至 CRegKey
辅助类来保存/加载配置值到/从注册表中是一件非常繁琐的事情。这个类使用类似 DDX 的方法将类成员变量映射到注册表数据。它非常易于使用,并且对于大多数典型的注册表用法来说已经足够智能。
如何使用
- 将 rsettings.h 包含到你的项目中
- 声明一个包含配置值的类,并使用
BEGIN_REG_MAP
和END_REG_MAP
定义映射// Sample application configuration class CMySettings : public CRegSettings { public: DWORD Value1; // DWORD option CString Value2; // String option DWORD RequiredValue; BEGIN_REG_MAP(CMySettings) REG_ITEM(Value1, 1) REG_ITEM(Value2, "Default Value") REG_ITEM_REQUIRE(RequiredValue) END_REG_MAP() };
- 就是这样!现在你可以保存或加载值了
CMySettings settings(HKEY_CURRENT_USER, "Software\\My Company\\Application\\1.0"); settings.Load(); // Load configuration ... // use values settings.Value1 etc. settings.Save(); // Save configuration
CRegSettings
构造函数可以接受可变数量的参数
CMySettings settings(HKEY_CURRENT_USER, "Software\\%s\\%s\\%i", "My Company", "My Application", Version);
支持的类型
映射到注册表中相应键和值的变量
变量类型 | 注册表数据类型 |
DWORD |
REG_DWORD |
int |
REG_DWORD |
long |
REG_DWORD |
bool |
REG_DWORD |
char |
REG_DWORD |
wchar_t |
REG_DWORD |
TCHAR* |
REG_SZ |
void* (结构体、数组等) |
REG_BINARY |
CString |
REG_SZ |
CSimpleArray<T> * |
子键 |
std::string |
REG_SZ |
std::vector<T> * |
子键 |
std::list<T> * |
子键 |
T * |
子键 |
* - T 必须继承自 CRegSettings
并包含使用 BEGIN_REG_MAP
- END_REG_MAP
声明的映射
宏参考
BEGIN_REG_MAP(class Name)
- 标记注册表映射的开始。
END_REG_MAP()
- 标记注册表映射的结束。
REG_ITEM(VarName, DefaultValue)
- 将变量映射到注册表值。注册表值将被命名为“VarName”。如果在加载时注册表中不存在该值,则变量将被赋值为 DefaultValue。变量可以是以下类型之一:DWORD
、int
、long
、bool
、char
、wchar_t
、CString
。
REG_ITEM_REQUIRE(VarName)
- 与 REG_ITEM
相同,但不能指定默认值。如果注册表中不存在该值,则 Load()
调用将失败。
REG_ITEM_SUBKEY(VarName)
- 将继承自 CRegSettings
的类映射到子键。该类必须包含使用 BEGIN_REG_MAP
- END_REG_MAP
声明的映射。请参阅示例应用程序。
REG_ITEM_SIMPLE_ARRAY(VarName)
- 将 ATL 模板类 CSimpleArray<T>
映射到注册表。T
必须继承自 CRegSettings
并必须包含使用 BEGIN_REG_MAP
- END_REG_MAP
声明的映射。数组项将保存在注册表的子键下。请参阅示例应用程序。
REG_ITEM_VECTOR(VarName)
- 与 REG_ITEM_SIMPLE_ARRAY
相同,但用于 std::vector
类型。
REG_ITEM_LIST(VarName)
- 与 REG_ITEM_SIMPLE_ARRAY
相同,但用于 std::list
类型。
REG_ITEM_SZ(VarName, DEFAULT_VALUE)
- 将 C 字符串 (TCHAR*
) 映射到注册表值 (REG_SZ)。注册表值将被命名为“VarName”。如果在加载时注册表中不存在该值,则变量将被赋值为 DefaultValue。
REG_ITEM_SZ_REQUIRE(VarName)
- 与 REG_ITEM_SZ
相同,但不能指定默认值。如果注册表中不存在该值,则 Load()
调用将失败。
REG_ITEM_SZ_LEN(VarName, DEFAULT_VALUE, VarLen)
- 与 REG_ITEM_SZ
相同,但增加了 VarLen 参数,用于指定 TCHAR
的缓冲区大小。
REG_ITEM_SZ_REQUIRE_LEN(VarName, VarLen)
- 与 REG_ITEM_SZ_REQUIRE
相同,但增加了 VarLen 参数,用于指定 TCHAR
的缓冲区大小。
REG_ITEM_BINARY(VarName)
- 将任何类型映射到注册表值 (REG_BINARY
)。注册表值将被命名为“VarName”。对于结构体、数组等非常有用。二进制数据的大小通过 sizeof(VarName)
计算。
REG_ITEM_BINARY_SIZE(VarName, VarSize)
- 与 REG_ITEM_BINARY
相同,但增加了 VarSize 参数,用于指定变量大小。
REG_ITEM_STL(VarName, DefaultValue) and REG_ITEM_STL_REQUIRE(VarName) -
与 REG_ITEM
和 REG_ITEM_REQUIRE
相同。将 std::string
映射到 REG_SZ
。
历史
- 7.10.2002
OnBeforeSave
,OnAfterLoad
虚方法;- 修复了 Bug。
- 25.09.2002
REG_ITEM_SUBKEY
:将数据存储在子键中REG_ITEM_BINARY,REG_ITEM_BINARY_SIZE
:存储二进制数据(void
*、结构体等)REG_ITEM_SZ, REG_ITEM_SZ_REQUIRE, REG_ITEM_SZ_LEN
,REG_ITEM_SZ_REQUIRE_LEN
:存储 C 字符串 (TCHAR
*)REG_ITEM
和REG_ITEM_REQUIRED
增强以支持:bool
、int
、char
和wchar_t
- 19.09.2002
- Created