bool CRegHistory::Save() const { if (m_sSection.empty()) return false; // save history to registry int nMax = min((int)m_arEntries.size(), m_nMaxHistoryItems + 1); for (int n = 0; n < (int)m_arEntries.size(); n++) { TCHAR sKey[4096] = {0}; if (m_pIniFile) { _stprintf_s(sKey, _countof(sKey), _T("%s%d"), m_sKeyPrefix.c_str(), n); m_pIniFile->SetValue(m_sSection.c_str(), sKey, m_arEntries[n].c_str()); } else { _stprintf_s(sKey, _countof(sKey), _T("%s\\%s%d"), m_sSection.c_str(), m_sKeyPrefix.c_str(), n); CRegStdString regkey(sKey); regkey = m_arEntries[n]; } } // remove items exceeding the max number of history items for (int n = nMax; ; n++) { TCHAR sKey[4096] = {0}; if (m_pIniFile) { _stprintf_s(sKey, _countof(sKey), _T("%s\\%s%d"), m_sSection.c_str(), m_sKeyPrefix.c_str(), n); if (wcscmp(m_pIniFile->GetValue(m_sSection.c_str(), sKey, L""), L"")==0) break; m_pIniFile->Delete(m_sSection.c_str(), sKey, false); } else { _stprintf_s(sKey, _countof(sKey), _T("%s\\%s%d"), m_sSection.c_str(), m_sKeyPrefix.c_str(), n); CRegStdString regkey = CRegStdString(sKey); if (std::wstring(regkey).empty()) break; regkey.removeValue(); // remove entry } } return true; }