将列宽和订单信息保存到注册表(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 API
    strtok_s()
    函数来检索值


    我使用了
    “Settings\\”
    ,以防您需要为每个ListControl存储更多的值,例如排序顺序。否则,您可以只使用一个名为
    “Settings\\ColumnOrder”
    的注册表部分,并使用
    作为值名。

    我对您的答案进行了细微的调整,谢谢!我现在遇到的问题是,我正在调用
    HDN\u ENDDRAG
    通知上的
    GetColumnOrderArray()
    ,但显然此时列列表顺序尚未更新;它总是返回拖放操作之前的顺序。什么时候我应该获得列顺序?我添加了一个关于获得列顺序的问题:我遇到了问题:/