2013-08-20 47 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