📄 chsprefs.cpp
字号:
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 + -