CRegKey与CRegSettings类使用指南

在Windows应用程序开发中,经常需要将应用程序的配置信息保存到注册表中。本文将介绍如何使用CRegKey类和CRegSettings类来实现这一功能。CRegKey是一个辅助类,用于简化注册表的读写操作。而CRegSettings类则提供了一种类似于DDX映射的机制,将类成员变量映射到注册表数据。

如何使用CRegSettings类

首先,需要将rsettings.h头文件包含到项目中。然后,声明一个类来包含配置值,并定义一个映射,使用BEGIN_REG_MAP和END_REG_MAP宏来标记映射的开始和结束。

class CMySettings : public CRegSettings { public: DWORD Value1; // DWORD类型选项 CString Value2; // 字符串类型选项 DWORD RequiredValue; // 必需的DWORD类型值 BEGIN_REG_MAP(CMySettings) REG_ITEM(Value1, 1) REG_ITEM(Value2, L"Default Value") REG_ITEM_REQUIRE(RequiredValue) END_REG_MAP() };

现在,可以保存或加载值:

CMySettings settings(HKEY_CURRENT_USER, L"Software\\My Company\\Application\\1.0"); settings.Load(); // 加载配置 // 使用值 settings.Value1 等 settings.Save(); // 保存配置

CRegSettings构造函数可以带有不同的参数数量:

CMySettings settings(HKEY_CURRENT_USER, L"Software\\%s\\%s\\%i", L"My Company", L"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* 子键
std::string REG_SZ
std::vector* 子键
std::list* 子键

宏参考

以下是一些常用的宏定义:

BEGIN_REG_MAP(ClassName) // 标记注册表映射的开始 END_REG_MAP() // 标记注册表映射的结束 REG_ITEM(VarName, DefaultValue) // 将变量映射到注册表值 REG_ITEM_REQUIRE(VarName) // 同上,但不允许指定默认值 REG_ITEM_SUBKEY(VarName) // 将CRegSettings继承的类映射到子键 REG_ITEM_SIMPLE_ARRAY(VarName) // 将CSimpleArray映射到注册表 REG_ITEM_VECTOR(VarName) // 同上,但适用于std::vector类型 REG_ITEM_LIST(VarName) // 同上,但适用于std::list类型 REG_ITEM_SZ(VarName, DEFAULT_VALUE) // 将C字符串映射到注册表值 REG_ITEM_SZ_REQUIRE(VarName) // 同上,但不允许指定默认值 REG_ITEM_SZ_LEN(VarName, DEFAULT_VALUE, VarLen) // 同上,但带缓冲区大小参数 REG_ITEM_BINARY(VarName) // 将任何类型映射到注册表值(REG_BINARY) REG_ITEM_BINARY_SIZE(VarName, VarSize) // 同上,但带变量大小参数 REG_ITEM_STL(VarName, DefaultValue) // 将std::string映射到REG_SZ REG_ITEM_STL_REQUIRE(VarName) // 同上,但不允许指定默认值
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485