将列宽和订单信息保存到注册表(MFC)

时间:2013-08-20 15:13:36

标签: mfc registry

为了保存列顺序,我考虑使用CSettingsStore类来保存和恢复注册表中的整数数组(我将使用CListCtrl::GetColumnOrderArray()CListCtrl::SetColumnOrderArray()的数组生成和设置)。但是我不知道这是否真实可行,或者使用什么注册表数据类型(DWORD?将int s装入字符串数组并使用多字符串?)。此外,CSettingsStore需要字符串路径才能打开密钥,而GetAppRegistryKey()会返回 HKEY ,所以我不确定如何在我的应用中使用CSettingsStore

我有3个问题。

  1. 此方法是否可用于加载和保存列信息?或者是否有一个明显更简单的解决方案?
  2. 我应该使用哪些数据类型在列表中存储列顺序数组?
  3. 如何将HKEY值转换为CString?或者我应该只查看我的应用程序的注册表项并对其进行硬编码?

1 个答案:

答案 0 :(得分:0)

我的建议是将列数和索引值格式化为逗号分隔的字符串(如5, 1, 3, 4, 2, 0,第一个数字是列数)并将其作为{{1}存储在注册表中用类似

的东西
REG_SZ

您可以使用AfxGetApp()->WriteProfileString(_T("Settings\\<ListControlName>"), _T("ColumnOrder"), sFormattedString); 加载字符串,并使用GetProfileString()或直接的API CStringT::Tokenize()函数来检索值。

我使用strtok_s()以防你需要为每个ListControl存储更多值,例如sort-order。否则,您可能只有一个名为"Settings\\<ListControlName>"的注册表部分,并使用"Settings\\ColumnOrder"作为值名称。