xref: /MusicPlayer2/MusicPlayer2/ReverbDlg.cpp (revision 86e2c9c227ea58a4f87dda2d9ffa8cbe422b3071)
1 // ReverbDlg.cpp : 实现文件
2 //
3 
4 #include "stdafx.h"
5 #include "MusicPlayer2.h"
6 #include "Player.h"
7 #include "ReverbDlg.h"
8 
9 
10 // CReverbDlg 对话框
11 
IMPLEMENT_DYNAMIC(CReverbDlg,CTabDlg)12 IMPLEMENT_DYNAMIC(CReverbDlg, CTabDlg)
13 
14 CReverbDlg::CReverbDlg(CWnd* pParent /*=NULL*/)
15     : CTabDlg(IDD_REVERB_DIALOG, pParent)
16 {
17 
18 }
19 
~CReverbDlg()20 CReverbDlg::~CReverbDlg()
21 {
22 }
23 
EnableControls(bool enable)24 void CReverbDlg::EnableControls(bool enable)
25 {
26     m_reverb_mix_slider.EnableWindow(enable);
27     m_reverb_time_slider.EnableWindow(enable);
28 }
29 
UpdateStaticText(int mix,int time)30 void CReverbDlg::UpdateStaticText(int mix, int time)
31 {
32     wchar_t buff[16];
33     swprintf_s(buff, L"%d%%", mix);
34     SetDlgItemText(IDC_REVERB_MIX_STATIC, buff);
35     swprintf_s(buff, L"%.2fs", static_cast<float>(time) / 100);
36     SetDlgItemText(IDC_REVERB_TIME_STATIC, buff);
37 }
38 
InitializeControls()39 bool CReverbDlg::InitializeControls()
40 {
41     wstring temp;
42     temp = theApp.m_str_table.LoadText(L"TXT_REVERB_ENABLE");
43     SetDlgItemTextW(IDC_ENABLE_REVERB_CHECK, temp.c_str());
44     temp = theApp.m_str_table.LoadText(L"TXT_REVERB_STRENGTH");
45     SetDlgItemTextW(IDC_TXT_REVERB_STRENGTH_STATIC, temp.c_str());
46     // IDC_REVERB_MIX_SLIDER
47     // IDC_REVERB_MIX_STATIC
48     temp = theApp.m_str_table.LoadText(L"TXT_REVERB_TIME");
49     SetDlgItemTextW(IDC_TXT_REVERB_TIME_STATIC, temp.c_str());
50     // IDC_REVERB_TIME_SLIDER
51     // IDC_REVERB_TIME_STATIC
52 
53     RepositionTextBasedControls({
54         { CtrlTextInfo::L3, IDC_TXT_REVERB_STRENGTH_STATIC },
55         { CtrlTextInfo::L2, IDC_REVERB_MIX_SLIDER },
56         { CtrlTextInfo::L1, IDC_REVERB_MIX_STATIC },
57         { CtrlTextInfo::L3, IDC_TXT_REVERB_TIME_STATIC },
58         { CtrlTextInfo::L2, IDC_REVERB_TIME_SLIDER },
59         { CtrlTextInfo::L1, IDC_REVERB_TIME_STATIC }
60         });
61 
62     return true;
63 }
64 
DoDataExchange(CDataExchange * pDX)65 void CReverbDlg::DoDataExchange(CDataExchange* pDX)
66 {
67     CTabDlg::DoDataExchange(pDX);
68     DDX_Control(pDX, IDC_REVERB_MIX_SLIDER, m_reverb_mix_slider);
69     DDX_Control(pDX, IDC_REVERB_TIME_SLIDER, m_reverb_time_slider);
70 }
71 
72 
BEGIN_MESSAGE_MAP(CReverbDlg,CTabDlg)73 BEGIN_MESSAGE_MAP(CReverbDlg, CTabDlg)
74     ON_WM_HSCROLL()
75     ON_BN_CLICKED(IDC_ENABLE_REVERB_CHECK, &CReverbDlg::OnBnClickedEnableReverbCheck)
76     ON_WM_DESTROY()
77 END_MESSAGE_MAP()
78 
79 
80 // CReverbDlg 消息处理程序
81 
82 
83 BOOL CReverbDlg::OnInitDialog()
84 {
85     CTabDlg::OnInitDialog();
86 
87     // TODO:  在此添加额外的初始化
88 
89     //初始化滑动条
90     m_reverb_mix_slider.SetRange(0, 100);
91     m_reverb_mix_slider.SetPos(CPlayer::GetInstance().GetReverbMix());
92     m_reverb_time_slider.SetRange(1, 300);
93     m_reverb_time_slider.SetPos(CPlayer::GetInstance().GetReverbTime());
94 
95     //初始化静态控件的文本
96     UpdateStaticText(m_reverb_mix_slider.GetPos(), m_reverb_time_slider.GetPos());
97 
98     //初始化混响开关复选框
99     CheckDlgButton(IDC_ENABLE_REVERB_CHECK, CPlayer::GetInstance().GetReverbEnable());
100 
101     if (CPlayer::GetInstance().IsFfmpegCore() || CPlayer::GetInstance().IsMciCore()) {
102         EnableControls(false);
103         EnableDlgCtrl(IDC_ENABLE_REVERB_CHECK, false);
104     } else {
105         //初始化控件的启用状态
106         EnableControls(CPlayer::GetInstance().GetReverbEnable());
107     }
108 
109     return TRUE;  // return TRUE unless you set the focus to a control
110                   // 异常: OCX 属性页应返回 FALSE
111 }
112 
113 
OnHScroll(UINT nSBCode,UINT nPos,CScrollBar * pScrollBar)114 void CReverbDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
115 {
116     // TODO: 在此添加消息处理程序代码和/或调用默认值
117     if (pScrollBar->GetDlgCtrlID() == IDC_REVERB_MIX_SLIDER || pScrollBar->GetDlgCtrlID() == IDC_REVERB_TIME_SLIDER)
118     {
119         int mix{ m_reverb_mix_slider.GetPos() };
120         int time{ m_reverb_time_slider.GetPos() };
121         CPlayer::GetInstance().GetPlayerCore()->SetReverb(mix, time);
122         UpdateStaticText(mix, time);
123     }
124 
125     CTabDlg::OnHScroll(nSBCode, nPos, pScrollBar);
126 }
127 
128 
OnBnClickedEnableReverbCheck()129 void CReverbDlg::OnBnClickedEnableReverbCheck()
130 {
131     // TODO: 在此添加控件通知处理程序代码
132     bool enable = (IsDlgButtonChecked(IDC_ENABLE_REVERB_CHECK) != FALSE);
133     CPlayer::GetInstance().EnableReverb(enable);
134     EnableControls(enable);
135 }
136 
137 
OnDestroy()138 void CReverbDlg::OnDestroy()
139 {
140     CPlayer::GetInstance().SetReverbMix(m_reverb_mix_slider.GetPos());
141     CPlayer::GetInstance().SetReverbTime(m_reverb_time_slider.GetPos());
142 
143     CTabDlg::OnDestroy();
144 }
145