将列宽和订单信息保存到注册表(MFC)
为了保存列顺序,我考虑使用将列宽和订单信息保存到注册表(MFC),mfc,registry,Mfc,Registry,为了保存列顺序,我考虑使用CSettingsStore类在注册表中保存和恢复整数数组(我将使用CListCtrl::GetColumnOrderArray()和CListCtrl::SetColumnOrderArray()生成和设置的数组)。但我不知道这在现实中是否可行,或者使用什么注册表数据类型(DWORD?将ints填充到字符串数组中并使用多字符串?)。另外,csettingstore需要一个字符串路径来打开键,而GetAppRegistryKey()返回一个HKEY,所以我甚至不知道如何
CSettingsStore
类在注册表中保存和恢复整数数组(我将使用CListCtrl::GetColumnOrderArray()
和CListCtrl::SetColumnOrderArray()
生成和设置的数组)。但我不知道这在现实中是否可行,或者使用什么注册表数据类型(DWORD
?将int
s填充到字符串数组中并使用多字符串?)。另外,csettingstore
需要一个字符串路径来打开键,而GetAppRegistryKey()
返回一个HKEY
,所以我甚至不知道如何在我的应用程序中使用csettingstore
我有三个问题
HKEY
值转换为CString
?或者我应该只查找应用程序的注册表项并对其进行硬编码我的建议是将列计数和索引值格式化为逗号分隔的字符串(如
5,1,3,4,2,0
,第一个数字是列计数),并将其作为REG_SZ
存储在注册表中
AfxGetApp()->WriteProfileString(_T("Settings\\<ListControlName>"), _T("ColumnOrder"), sFormattedString);
AfxGetApp()->WriteProfileString(_T(“Settings\”)、_T(“ColumnOrder”)、sformatedString);
您可以使用GetProfileString()
加载字符串,并使用CStringT::Tokenize()
或straight APIstrtok_s()
函数来检索值
我使用了
“Settings\\”
,以防您需要为每个ListControl存储更多的值,例如排序顺序。否则,您可以只使用一个名为“Settings\\ColumnOrder”
的注册表部分,并使用
作为值名。我对您的答案进行了细微的调整,谢谢!我现在遇到的问题是,我正在调用HDN\u ENDDRAG
通知上的GetColumnOrderArray()
,但显然此时列列表顺序尚未更新;它总是返回拖放操作之前的顺序。什么时候我应该获得列顺序?我添加了一个关于获得列顺序的问题:我遇到了问题:/