2013-08-20 38 views
0

)为了保存列顺序,我正在考虑使用CSettingsStore类来保存和恢复注册表中的整数数组(我将使用CListCtrl::GetColumnOrderArray()CListCtrl::SetColumnOrderArray()来生成数组并设置)。但我不知道这是否是现实可能的,或者使用哪种注册表数据类型(DWORD?将int填充到字符串数组中并使用多字符串?)。此外,CSettingsStore需要路径开拓键,而GetAppRegistryKey()返回HKEY,所以我不知道如何使用,甚至CSettingsStore与我的应用程序。将列宽和顺序信息保存到注册表中(

我有3个问题。

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

回答

0

我的建议是格式化的列数和指数值由逗号分隔的字符串(如5, 1, 3, 4, 2, 0,第一个数字是列数),并在注册表中REG_SZ喜欢的东西

存储
AfxGetApp()->WriteProfileString(_T("Settings\\<ListControlName>"), _T("ColumnOrder"), sFormattedString); 

可以使用GetProfileString()加载字符串,请使用CStringT::Tokenize()或直API strtok_s()函数来获取值。

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

+0

我用你的答案进行了小小的调整,谢谢!我现在遇到的问题是我在'HDN_ENDDRAG'通知中调用'GetColumnOrderArray()',但显然列表顺序尚未在此时更新;它总是返回拖放操作之前的顺序。任何想法,当我应该得到列顺序? – aguazales

+0

我添加了一个[SO帖子](http://stackoverflow.com/questions/18383093/get-column-order-mfc)关于获取列顺序:我有麻烦:/ – aguazales