BOOL CListCtrl::LoadColumnsState(HKEY hRootKey,LPCSTR lpKey,LPCSTR lpSubKey) { CRegKey RegKey; if (lpKey==NULL) RegKey.m_hKey=hRootKey; else if (RegKey.OpenKey(hRootKey,lpKey,CRegKey::openExist|CRegKey::samRead)!=ERROR_SUCCESS) return FALSE; DWORD nDataLength=RegKey.QueryValueLength(lpSubKey); if (nDataLength<4) { if (lpKey==NULL) RegKey.m_hKey=NULL; return FALSE; } int* pData=(int*)new BYTE[nDataLength]; DWORD dwRet=RegKey.QueryValue(lpSubKey,(LPSTR)pData,nDataLength); if (lpKey==NULL) RegKey.m_hKey=NULL; if (dwRet<nDataLength) { delete[] (BYTE*)pData; return FALSE; } if ((pData[0]*2+1)*sizeof(int)!=nDataLength) { delete[] (BYTE*)pData; return FALSE; } BOOL nOrderOK=FALSE; for (int i=0;i<pData[0];i++) { SetColumnWidth(i,pData[1+i]); if (pData[1+pData[0]+i]!=0) nOrderOK=TRUE; } if (nOrderOK) SetColumnOrderArray(pData[0],pData+1+pData[0]); delete[] (BYTE*)pData; return TRUE; }