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

📄 chsprefs.cpp

📁 Windows上的MUD客户端程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	GetMainInfo()->GetWavePlayer()->Stop();
	GetMainInfo()->GetMidiPlayer()->Stop();

	ChPropertyBaseClass::OnDestroy();
}


BEGIN_MESSAGE_MAP( ChSoundPrefs, ChPropertyBaseClass )
	//{{AFX_MSG_MAP(ChSoundPrefs)
	ON_BN_CLICKED(IDC_ALERT_SOUND, OnAlertSound)
	ON_WM_VSCROLL()
	ON_CBN_EDITCHANGE(IDC_TIME_COUNT, OnEditchangeTimeCount)
	ON_CBN_CLOSEUP(IDC_TIME_COUNT, OnCloseupTimeCount)
	ON_CBN_SELCHANGE(IDC_TIME_UNITS, OnSelchangeTimeUnits)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_CHECK_DISABLE, OnCheckDisable)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/*----------------------------------------------------------------------------
	ChSoundPrefs protected methods
----------------------------------------------------------------------------*/

void ChSoundPrefs::TestAlertSound()
{
	chuint16		suVolume;
	string			strAlertPath;

	ASSERT( GetMainInfo() );

	suVolume = GetSliderVolume( &m_alertVolume );

	if (!m_strAlertSoundPath.IsEmpty() &&
		ChUtil::FileExists( m_strAlertSoundPath ))
	{
		strAlertPath = m_strAlertSoundPath;
	}
	else
	{
		strAlertPath = GetSysSoundFilesPath() + "Tada.wav";
	}

	ChSoundInfo		info( false, true, suVolume );

	info.SetFilename( strAlertPath );
	info.SetDeviceType( devWave );

	GetMainInfo()->DoPlay( &info );
}


void ChSoundPrefs::TestWaveSound()
{
	chuint16	suVolume;
	string		strPath;

	suVolume = GetSliderVolume( &m_waveVolume );

	strPath = GetSysSoundFilesPath() + "Chimes.wav";

	ChSoundInfo		info( false, true, suVolume );

	info.SetFilename( strPath );
	info.SetDeviceType( devWave );

	ASSERT( GetMainInfo() );
	GetMainInfo()->DoPlay( &info );
}


void ChSoundPrefs::TestMidiSound()
{
	if (!m_strMidiFilePath.IsEmpty())
	{
		chuint16	suVolume;

		suVolume = GetSliderVolume( &m_midiVolume );

		ChSoundInfo		info( false, true, suVolume );

		info.SetFilename( m_strMidiFilePath );
		info.SetDeviceType( devMidi );

		ASSERT( GetMainInfo() );
		GetMainInfo()->DoPlay( &info );
	}
}


void ChSoundPrefs::InitAlertFreq()
{
	char	buffer[32];

	ltoa( m_alertTime.GetAlertCount(), buffer, 10 );
	m_comboTimeCount.SetWindowText( buffer );
	m_comboTimeUnits.SelectString( -1, m_alertTime.GetAlertUnitsName() );
}


void ChSoundPrefs::WriteAlertSound()
{
	m_reg.Write( SOUND_PREFS_ALERT_SOUND, m_strAlertSoundPath );
}


void ChSoundPrefs::UpdateAlertSoundName()
{
	if (m_strAlertSoundPath.IsEmpty())
	{
		string		strNoSound;

		LOADSTRING( IDS_NO_SOUND, strNoSound );
		m_staticAlertSoundName.SetWindowText( strNoSound );
	}
	else
	{
		m_staticAlertSoundName.SetWindowText( ExtractAlertSoundName() );
	}
}


string ChSoundPrefs::ExtractAlertSoundName()
{
	if (m_strAlertSoundPath.IsEmpty())
	{
		return "";
	}
	else
	{
		char	name[_MAX_FNAME];

		_splitpath( m_strAlertSoundPath, 0, 0, name, 0 );

		return name;
	}
}


string ChSoundPrefs::ExtractAlertSoundTitle()
{
	if (m_strAlertSoundPath.IsEmpty())
	{
		return "*.wav";
	}
	else
	{
		char	name[_MAX_FNAME];
		char	ext[_MAX_EXT];

		_splitpath( m_strAlertSoundPath, 0, 0, name, ext );

		string	strTitle( name );

		strTitle += ext;

		return strTitle;
	}
}


string ChSoundPrefs::ExtractAlertSoundPath()
{
	if (m_strAlertSoundPath.IsEmpty())
	{
		return GetSysSoundFilesPath();
	}
	else
	{
		char	drive[_MAX_DRIVE];
		char	dir[_MAX_DIR];

		_splitpath( m_strAlertSoundPath, drive, dir, 0, 0 );

		string	strPath( drive );

		strPath += dir;

		return strPath;
	}
}


void ChSoundPrefs::AdjustUI()
{
	if (!SoundDeviceFound() || IsDisabled())
	{										// Disable everything

		m_staticAlertSoundName.EnableWindow( false );
		m_staticOff.EnableWindow( false );
		m_staticMusic.EnableWindow( false );
		m_staticMsg.EnableWindow( false );
		m_staticMax.EnableWindow( false );
		m_staticEffects.EnableWindow( false );
		m_staticBox.EnableWindow( false );
		m_staticAlerts.EnableWindow( false );
		m_staticAlertSoundName.EnableWindow( false );
		m_comboTimeUnits.EnableWindow( false );
		m_comboTimeCount.EnableWindow( false );
		m_midiVolume.EnableWindow( false );
		m_waveVolume.EnableWindow( false );
		m_alertVolume.EnableWindow( false );
		m_btnAlertSound.EnableWindow( false );

		if (!SoundDeviceFound())
		{
			m_btnDisable.EnableWindow( false );
		}
	}
	else
	{										// Enable everything

		m_staticAlertSoundName.EnableWindow();
		m_staticOff.EnableWindow();
		m_staticMusic.EnableWindow();
		m_staticMsg.EnableWindow();
		m_staticMax.EnableWindow();
		m_staticEffects.EnableWindow();
		m_staticBox.EnableWindow();
		m_staticAlerts.EnableWindow();
		m_staticAlertSoundName.EnableWindow();
		m_comboTimeUnits.EnableWindow();
		m_comboTimeCount.EnableWindow();
		m_midiVolume.EnableWindow();
		m_waveVolume.EnableWindow();
		m_alertVolume.EnableWindow();
		m_btnAlertSound.EnableWindow();
	}

	if (SoundDeviceFound())
	{
		m_staticDisableMsg.SetWindowText( "" );
	}
	else
	{
		string		strExplanation;

#if defined( CH_PUEBLO_PLUGIN )
		if (ChUtil::Load( (chparam)AfxGetInstanceHandle(), IDS_PREF_NO_DEVICES,
							strExplanation ))
#else
					
		if (ChUtil::Load( (chparam)ChSoundDLL.hModule, IDS_PREF_NO_DEVICES,
							strExplanation ))
#endif					
		{
			m_staticDisableMsg.SetWindowText( strExplanation );
		}
	}
}


/*----------------------------------------------------------------------------
	ChSoundPrefs message handlers
----------------------------------------------------------------------------*/

bool ChSoundPrefs::OnInitDialog() 
{
	ChPropertyBaseClass ::OnInitDialog();

	AdjustUI();

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void ChSoundPrefs::OnAlertSound()
{
 	ChSoundOpenFileDlg	fileDlg( GetMainInfo(),
 									GetSliderVolume( &m_alertVolume ),
 									ExtractAlertSoundPath(),
 									ExtractAlertSoundTitle() );
	int					iResult;

	iResult = fileDlg.DoModal();

	switch( iResult )
	{
		case IDOK:
		{
			m_strAlertSoundPath = fileDlg.GetPathName();

			WriteAlertSound();
			UpdateAlertSoundName();
			break;
		}

		case IDCANCEL:
		{
			break;
		}
	}
}


void ChSoundPrefs::OnVScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar )
{
	ChPropertyBaseClass::OnVScroll( nSBCode, nPos, pScrollBar );

	ASSERT( pScrollBar );

	switch( nSBCode )
	{
		case SB_ENDSCROLL:
		{
			switch( pScrollBar->GetDlgCtrlID() )
			{
				case IDC_SLIDER_VOLUME_MIDI:
				{
					TestMidiSound();
					break;
				}

				case IDC_SLIDER_VOLUME_WAVE:
				{
					TestWaveSound();
					break;
				}

				case IDC_SLIDER_VOLUME_ALERT:
				{
					TestAlertSound();
					break;
				}

				default:
				{
					break;
				}
			}
			break;
		}
	}
}


void ChSoundPrefs::OnEditchangeTimeCount()
{
	string		strText;
	chint32		lUnits;
	char		buffer[32];

	m_comboTimeCount.GetWindowText( strText );

	lUnits = atol( strText );
	ltoa( lUnits, buffer, 10 );

	if (strText != buffer)
	{
		m_comboTimeCount.SetWindowText( buffer );
		m_comboTimeCount.SetEditSel( -1, -1 );
	}

	m_alertTime.SetAlertCount( lUnits );
}


void ChSoundPrefs::OnCloseupTimeCount()
{
	PostMessage( WM_COMMAND,
					MAKELONG( m_comboTimeCount.GetDlgCtrlID(),
								CBN_EDITCHANGE ),
					(LONG)m_hWnd );
}

void ChSoundPrefs::OnSelchangeTimeUnits()
{
	string		strText;
	int			iSel;

	iSel = m_comboTimeUnits.GetCurSel();
	if (iSel < 0)
	{
		iSel = 0;
	}
	m_comboTimeUnits.GetLBText( iSel, strText );

	m_alertTime.SetAlertUnits( strText );
}


void ChSoundPrefs::OnCheckDisable() 
{
	UpdateData();
	AdjustUI();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -