⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 settings.cpp

📁 p2p软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:

	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 + -