📄 settings.cpp
字号:
theApp.WriteProfileInt( _T("Windows"), strEntry + _T(".Left"), pPos.rcNormalPosition.left );
theApp.WriteProfileInt( _T("Windows"), strEntry + _T(".Top"), pPos.rcNormalPosition.top );
theApp.WriteProfileInt( _T("Windows"), strEntry + _T(".Right"), pPos.rcNormalPosition.right );
theApp.WriteProfileInt( _T("Windows"), strEntry + _T(".Bottom"), pPos.rcNormalPosition.bottom );
}
//////////////////////////////////////////////////////////////////////
// CSettings list header persistance
BOOL CSettings::LoadList(LPCTSTR pszName, CListCtrl* pCtrl, int nSort)
{
LV_COLUMN pColumn;
pColumn.mask = LVCF_FMT;
for ( int nColumns = 0 ; pCtrl->GetColumn( nColumns, &pColumn ) ; nColumns++ );
CString strOrdering, strWidths, strItem;
BOOL bSuccess = FALSE;
strItem.Format( _T("%s.Ordering"), pszName );
strOrdering = theApp.GetProfileString( _T("ListStates"), strItem, _T("") );
strItem.Format( _T("%s.Widths"), pszName );
strWidths = theApp.GetProfileString( _T("ListStates"), strItem, _T("") );
strItem.Format( _T("%s.Sort"), pszName );
nSort = theApp.GetProfileInt( _T("ListStates"), strItem, nSort );
if ( strOrdering.GetLength() == nColumns * 2 &&
strWidths.GetLength() == nColumns * 4 )
{
UINT* pOrdering = new UINT[ nColumns ];
for ( int nColumn = 0 ; nColumn < nColumns ; nColumn++ )
{
_stscanf( strWidths.Mid( nColumn * 4, 4 ), _T("%x"), &pOrdering[ nColumn ] );
pCtrl->SetColumnWidth( nColumn, pOrdering[ nColumn ] );
_stscanf( strOrdering.Mid( nColumn * 2, 2 ), _T("%x"), &pOrdering[ nColumn ] );
}
pCtrl->SendMessage( LVM_SETCOLUMNORDERARRAY, nColumns, (LPARAM)pOrdering );
delete [] pOrdering;
bSuccess = TRUE;
}
SetWindowLong( pCtrl->GetSafeHwnd(), GWL_USERDATA, nSort );
CHeaderCtrl* pHeader = (CHeaderCtrl*)pCtrl->GetWindow( GW_CHILD );
if ( pHeader ) Skin.Translate( pszName, pHeader );
return bSuccess;
}
void CSettings::SaveList(LPCTSTR pszName, CListCtrl* pCtrl)
{
LV_COLUMN pColumn;
pColumn.mask = LVCF_FMT;
for ( int nColumns = 0 ; pCtrl->GetColumn( nColumns, &pColumn ) ; nColumns++ );
UINT* pOrdering = new UINT[ nColumns ];
ZeroMemory( pOrdering, nColumns * sizeof(UINT) );
pCtrl->SendMessage( LVM_GETCOLUMNORDERARRAY, nColumns, (LPARAM)pOrdering );
CString strOrdering, strWidths, strItem;
for ( int nColumn = 0 ; nColumn < nColumns ; nColumn++ )
{
strItem.Format( _T("%.2x"), pOrdering[ nColumn ] );
strOrdering += strItem;
strItem.Format( _T("%.4x"), pCtrl->GetColumnWidth( nColumn ) );
strWidths += strItem;
}
delete [] pOrdering;
int nSort = GetWindowLong( pCtrl->GetSafeHwnd(), GWL_USERDATA );
strItem.Format( _T("%s.Ordering"), pszName );
theApp.WriteProfileString( _T("ListStates"), strItem, strOrdering );
strItem.Format( _T("%s.Widths"), pszName );
theApp.WriteProfileString( _T("ListStates"), strItem, strWidths );
strItem.Format( _T("%s.Sort"), pszName );
theApp.WriteProfileInt( _T("ListStates"), strItem, nSort );
}
//////////////////////////////////////////////////////////////////////
// CSettings startup
BOOL CSettings::CheckStartup()
{
BOOL bStartup;
HKEY hKey;
if ( RegOpenKeyEx( HKEY_CURRENT_USER,
_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_QUERY_VALUE, &hKey )
!= ERROR_SUCCESS ) return FALSE;
bStartup = ( RegQueryValueEx( hKey, _T("Shareaza"), NULL, NULL, NULL, NULL ) == ERROR_SUCCESS );
RegCloseKey( hKey );
return bStartup;
}
void CSettings::SetStartup(BOOL bStartup)
{
HKEY hKey;
if ( RegOpenKeyEx( HKEY_CURRENT_USER,
_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_ALL_ACCESS, &hKey )
!= ERROR_SUCCESS ) return;
if ( bStartup )
{
CString strCommand;
TCHAR szPath[128];
GetModuleFileName( NULL, szPath, 128 );
strCommand.Format( _T("\"%s\" -tray"), szPath );
RegSetValueEx( hKey, _T("Shareaza"), 0, REG_SZ, (const BYTE*)(LPCTSTR)strCommand,
( strCommand.GetLength() + 1 ) * sizeof(TCHAR) );
}
else
{
RegDeleteValue( hKey, _T("Shareaza") );
}
RegCloseKey( hKey );
}
//////////////////////////////////////////////////////////////////////
// CSettings configurable user agent
CString CSettings::SmartAgent(LPCTSTR pszAgent)
{
CString strAgent;
if ( pszAgent && *pszAgent )
{
if ( _tcscmp( pszAgent, _T(".") ) == 0 )
strAgent = _T("Shareaza ") + theApp.m_sVersion;
else
strAgent = pszAgent;
}
return strAgent;
}
//////////////////////////////////////////////////////////////////////
// CSettings volume
CString CSettings::SmartVolume(QWORD nVolume, BOOL bKB, BOOL bRateInBits)
{
LPCTSTR pszUnit = _T("B");
CString strVolume;
if ( bRateInBits )
{
if ( General.RatesInBytes )
{
nVolume /= 8;
pszUnit = _T("B/s");
}
else
{
pszUnit = _T("b/s");
}
if ( General.RatesUnit > 0 )
{
if ( bKB ) nVolume *= 1024;
switch ( General.RatesUnit )
{
case 1:
strVolume.Format( _T("%I64i %s"), nVolume, pszUnit );
return strVolume;
case 2:
strVolume.Format( _T("%.2lf K%s"), (double)nVolume / 1024, pszUnit );
return strVolume;
case 3:
strVolume.Format( _T("%.2lf M%s"), (double)nVolume / (1024*1024), pszUnit );
return strVolume;
}
if ( bKB ) nVolume /= 1024;
}
}
if ( ! bKB )
{
if ( nVolume < 1024 )
{
strVolume.Format( _T("%I64i %s"), nVolume, pszUnit );
return strVolume;
}
nVolume /= 1024;
}
if ( nVolume < 1024 )
{
strVolume.Format( _T("%I64i K%s"), nVolume, pszUnit );
}
else if ( nVolume < 1024*1024 )
{
strVolume.Format( _T("%.2lf M%s"), (double)nVolume / 1024, pszUnit );
}
else if ( nVolume < 1024*1024*1024 )
{
strVolume.Format( _T("%.3lf G%s"), (double)nVolume / (1024*1024), pszUnit );
}
else
{
strVolume.Format( _T("%.3lf T%s"), (double)nVolume / (1024*1024*1024), pszUnit );
}
return strVolume;
}
QWORD CSettings::ParseVolume(LPCTSTR psz, BOOL bSpeedInBits)
{
double val = 0;
if ( _stscanf( psz, _T("%lf"), &val ) != 1 ) return 0;
if ( _tcsstr( psz, _T(" K") ) ) val *= 1024;
if ( _tcsstr( psz, _T(" k") ) ) val *= 1024;
if ( _tcsstr( psz, _T(" M") ) ) val *= 1024*1024;
if ( _tcsstr( psz, _T(" m") ) ) val *= 1024*1024;
if ( _tcsstr( psz, _T(" G") ) ) val *= 1024*1024*1024;
if ( _tcsstr( psz, _T(" g") ) ) val *= 1024*1024*1024;
if ( _tcsstr( psz, _T(" T") ) ) val *= 1099511627776.0f;
if ( _tcsstr( psz, _T(" t") ) ) val *= 1099511627776.0f;
if ( bSpeedInBits )
{
if ( _tcschr( psz, 'b' ) )
return (QWORD)val;
else if ( _tcschr( psz, 'B' ) )
return (QWORD)( val * 8 );
else
return 0;
}
else
{
return (QWORD)val;
}
}
//////////////////////////////////////////////////////////////////////
// CSettings::Item construction and operations
CSettings::Item::Item(LPCTSTR pszName, DWORD* pDword, DOUBLE* pFloat, CString* pString)
{
m_sName = pszName;
m_pDword = pDword;
m_pFloat = pFloat;
m_pString = pString;
}
void CSettings::Item::Load()
{
int nPos = m_sName.Find( '.' );
if ( nPos < 0 ) return;
if ( m_pDword )
{
*m_pDword = theApp.GetProfileInt( m_sName.Left( nPos ), m_sName.Mid( nPos + 1 ), *m_pDword );
}
else if ( m_pFloat )
{
CString str = theApp.GetProfileString( m_sName.Left( nPos ), m_sName.Mid( nPos + 1 ), _T("") );
if ( str.GetLength() ) _stscanf( str, _T("%lf"), m_pFloat );
}
else
{
*m_pString = theApp.GetProfileString( m_sName.Left( nPos ), m_sName.Mid( nPos + 1 ), *m_pString );
}
}
void CSettings::Item::Save()
{
int nPos = m_sName.Find( '.' );
if ( nPos < 0 ) return;
if ( m_pDword )
{
theApp.WriteProfileInt( m_sName.Left( nPos ), m_sName.Mid( nPos + 1 ), *m_pDword );
}
else if ( m_pFloat )
{
CString str;
str.Format( _T("%e"), *m_pFloat );
theApp.WriteProfileString( m_sName.Left( nPos ), m_sName.Mid( nPos + 1 ), str );
}
else
{
theApp.WriteProfileString( m_sName.Left( nPos ), m_sName.Mid( nPos + 1 ), *m_pString );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -