1 // EqualizerDlg.cpp : 实现文件
2 //
3
4 #include "stdafx.h"
5 #include "MusicPlayer2.h"
6 #include "Player.h"
7 #include "EqualizerDlg.h"
8 #include "IniHelper.h"
9
10
11 // CEqualizerDlg 对话框
12
IMPLEMENT_DYNAMIC(CEqualizerDlg,CTabDlg)13 IMPLEMENT_DYNAMIC(CEqualizerDlg, CTabDlg)
14
15 CEqualizerDlg::CEqualizerDlg(CWnd* pParent /*=NULL*/)
16 : CTabDlg(IDD_EQUALIZER_DIALOG, pParent)
17 {
18
19 }
20
~CEqualizerDlg()21 CEqualizerDlg::~CEqualizerDlg()
22 {
23 }
24
EnableControls(bool enable)25 void CEqualizerDlg::EnableControls(bool enable)
26 {
27 m_equ_style_list.EnableWindow(enable);
28 for (int i{}; i < EQU_CH_NUM; i++)
29 {
30 m_sliders[i].EnableWindow(enable);
31 }
32 }
33
SaveConfig() const34 void CEqualizerDlg::SaveConfig() const
35 {
36 CIniHelper ini(theApp.m_config_path);
37
38 ini.WriteInt(L"equalizer", L"equalizer_style", m_equ_style_selected);
39 //保存自定义的每个均衡器通道的增益
40 wchar_t buff[16];
41 for (int i{}; i < EQU_CH_NUM; i++)
42 {
43 swprintf_s(buff, L"channel%d", i + 1);
44 ini.WriteInt(L"equalizer", buff, m_user_defined_gain[i]);
45 }
46 ini.Save();
47 }
48
LoadConfig()49 void CEqualizerDlg::LoadConfig()
50 {
51 CIniHelper ini(theApp.m_config_path);
52
53 m_equ_style_selected = ini.GetInt(L"equalizer", L"equalizer_style", 0);
54 //读取自定义的每个均衡器通道的增益
55 wchar_t buff[16];
56 for (int i{}; i < EQU_CH_NUM; i++)
57 {
58 swprintf_s(buff, L"channel%d", i + 1);
59 m_user_defined_gain[i] = ini.GetInt(L"equalizer", buff, 0);
60 }
61 }
62
UpdateChannelTip(int channel,int gain)63 void CEqualizerDlg::UpdateChannelTip(int channel, int gain)
64 {
65 if (channel < 0 || channel >= EQU_CH_NUM) return;
66 wchar_t buff[8];
67 swprintf_s(buff, L"%ddB", gain);
68 m_Mytip.UpdateTipText(buff, &m_sliders[channel]); //更新鼠标提示
69 }
70
InitializeControls()71 bool CEqualizerDlg::InitializeControls()
72 {
73 wstring temp;
74 temp = theApp.m_str_table.LoadText(L"TXT_EQ_ENABLE");
75 SetDlgItemTextW(IDC_ENABLE_EQU_CHECK, temp.c_str());
76 temp = theApp.m_str_table.LoadText(L"TXT_EQ_PRESET");
77 SetDlgItemTextW(IDC_TXT_EQ_PRESET_STATIC, temp.c_str());
78 temp = theApp.m_str_table.LoadText(L"TXT_EQ_CHANNEL_SETTING");
79 SetDlgItemTextW(IDC_TXT_EQ_CHANNEL_SETTING_STATIC, temp.c_str());
80
81 return false;
82 }
83
DoDataExchange(CDataExchange * pDX)84 void CEqualizerDlg::DoDataExchange(CDataExchange* pDX)
85 {
86 CTabDlg::DoDataExchange(pDX);
87 DDX_Control(pDX, IDC_SLIDER1, m_sliders[0]);
88 DDX_Control(pDX, IDC_SLIDER2, m_sliders[1]);
89 DDX_Control(pDX, IDC_SLIDER3, m_sliders[2]);
90 DDX_Control(pDX, IDC_SLIDER4, m_sliders[3]);
91 DDX_Control(pDX, IDC_SLIDER5, m_sliders[4]);
92 DDX_Control(pDX, IDC_SLIDER6, m_sliders[5]);
93 DDX_Control(pDX, IDC_SLIDER7, m_sliders[6]);
94 DDX_Control(pDX, IDC_SLIDER8, m_sliders[7]);
95 DDX_Control(pDX, IDC_SLIDER9, m_sliders[8]);
96 DDX_Control(pDX, IDC_SLIDER10, m_sliders[9]);
97 DDX_Control(pDX, IDC_EQU_STYLES_LIST, m_equ_style_list);
98 }
99
100
BEGIN_MESSAGE_MAP(CEqualizerDlg,CTabDlg)101 BEGIN_MESSAGE_MAP(CEqualizerDlg, CTabDlg)
102 ON_WM_VSCROLL()
103 ON_BN_CLICKED(IDC_ENABLE_EQU_CHECK, &CEqualizerDlg::OnBnClickedEnableEquCheck)
104 ON_WM_DESTROY()
105 ON_MESSAGE(WM_LISTBOX_SEL_CHANGED, &CEqualizerDlg::OnListboxSelChanged)
106 END_MESSAGE_MAP()
107
108
109 // CEqualizerDlg 消息处理程序
110
111
112 BOOL CEqualizerDlg::OnInitDialog()
113 {
114 CTabDlg::OnInitDialog();
115
116 // TODO: 在此添加额外的初始化
117 LoadConfig();
118
119 //初始化滑动条的位置
120 for (int i{}; i < EQU_CH_NUM; i++)
121 {
122 m_sliders[i].SetRange(-15, 15, TRUE);
123 m_sliders[i].SetPos(-CPlayer::GetInstance().GeEqualizer(i));
124 }
125
126 //初始化均衡器开关复选框
127 CheckDlgButton(IDC_ENABLE_EQU_CHECK, CPlayer::GetInstance().GetEqualizerEnable());
128
129 //初始化“均衡器预设”列表
130 m_equ_style_list.AddString(theApp.m_str_table.LoadText(L"TXT_EQ_NONE").c_str());
131 m_equ_style_list.AddString(theApp.m_str_table.LoadText(L"TXT_EQ_CLASSICAL").c_str());
132 m_equ_style_list.AddString(theApp.m_str_table.LoadText(L"TXT_EQ_POP").c_str());
133 m_equ_style_list.AddString(theApp.m_str_table.LoadText(L"TXT_EQ_JAZZ").c_str());
134 m_equ_style_list.AddString(theApp.m_str_table.LoadText(L"TXT_EQ_ROCK").c_str());
135 m_equ_style_list.AddString(theApp.m_str_table.LoadText(L"TXT_EQ_SOFT").c_str());
136 m_equ_style_list.AddString(theApp.m_str_table.LoadText(L"TXT_EQ_BASS").c_str());
137 m_equ_style_list.AddString(theApp.m_str_table.LoadText(L"TXT_EQ_ELIMINATE_BASS").c_str());
138 m_equ_style_list.AddString(theApp.m_str_table.LoadText(L"TXT_EQ_WEAKENING_TREBLE").c_str());
139 m_equ_style_list.AddString(theApp.m_str_table.LoadText(L"TXT_EQ_USER_DEFINE").c_str());
140 m_equ_style_list.SetCurSel(m_equ_style_selected);
141
142 //初始化控件的启用禁用状态
143 EnableControls(CPlayer::GetInstance().GetEqualizerEnable());
144
145 //初始化提示信息
146 m_Mytip.Create(this, TTS_ALWAYSTIP);
147 wchar_t buff[8];
148 for (int i{}; i < EQU_CH_NUM; i++)
149 {
150 swprintf_s(buff, L"%ddB", -m_sliders[i].GetPos());
151 m_Mytip.AddTool(&m_sliders[i], buff);
152 }
153
154 return TRUE; // return TRUE unless you set the focus to a control
155 // 异常: OCX 属性页应返回 FALSE
156 }
157
158
OnVScroll(UINT nSBCode,UINT nPos,CScrollBar * pScrollBar)159 void CEqualizerDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
160 {
161 // TODO: 在此添加消息处理程序代码和/或调用默认值
162 for (int i{}; i < EQU_CH_NUM; i++)
163 {
164 if (pScrollBar->GetSafeHwnd() == m_sliders[i].GetSafeHwnd())
165 {
166 int gain{ -m_sliders[i].GetPos() }; //由于滑动条的值越往上越小,所以这里取负数
167 CPlayer::GetInstance().SetEqualizer(i, gain); //设置通道i的增益
168 UpdateChannelTip(i, gain); //更新鼠标提示
169
170 if (m_equ_style_list.GetCurSel() == 9) //如果“均衡器预设”中选中的是自定义
171 {
172 m_user_defined_gain[i] = gain; //将增益值保存到用户自定义增益里
173 }
174 else
175 {
176 //否则,将当前每个滑动条上的增益设置保存到m_user_defined_gain里
177 for (int j{}; j < EQU_CH_NUM; j++)
178 {
179 m_user_defined_gain[j] = -m_sliders[j].GetPos();
180 }
181 m_equ_style_list.SetCurSel(9); //更改了均衡器的设定,“均衡器预设”中自动选中“自定义”
182 m_equ_style_selected = 9;
183 }
184 break;
185 }
186 }
187
188 CTabDlg::OnVScroll(nSBCode, nPos, pScrollBar);
189 }
190
191
PreTranslateMessage(MSG * pMsg)192 BOOL CEqualizerDlg::PreTranslateMessage(MSG* pMsg)
193 {
194 // TODO: 在此添加专用代码和/或调用基类
195 if (pMsg->message == WM_MOUSEMOVE)
196 m_Mytip.RelayEvent(pMsg);
197
198 return CTabDlg::PreTranslateMessage(pMsg);
199 }
200
201
OnBnClickedEnableEquCheck()202 void CEqualizerDlg::OnBnClickedEnableEquCheck()
203 {
204 // TODO: 在此添加控件通知处理程序代码
205 bool enable = (IsDlgButtonChecked(IDC_ENABLE_EQU_CHECK) != FALSE);
206 CPlayer::GetInstance().EnableEqualizer(enable);
207 EnableControls(enable);
208 }
209
210
OnListboxSelChanged(WPARAM wParam,LPARAM lParam)211 afx_msg LRESULT CEqualizerDlg::OnListboxSelChanged(WPARAM wParam, LPARAM lParam)
212 {
213 if ((CWnd*)wParam == &m_equ_style_list)
214 {
215 m_equ_style_selected = (int)lParam;
216 if (m_equ_style_selected >= 0 && m_equ_style_selected < 9)
217 {
218 //根据选中的均衡器风格设置每个通道的增益
219 for (int i{}; i < EQU_CH_NUM; i++)
220 {
221 int gain = EQU_STYLE_TABLE[m_equ_style_selected][i];
222 CPlayer::GetInstance().SetEqualizer(i, gain);
223 m_sliders[i].SetPos(-gain);
224 UpdateChannelTip(i, gain); //更新鼠标提示
225 }
226 }
227 else if (m_equ_style_selected == 9) //如果选择了“自定义”
228 {
229 for (int i{}; i < EQU_CH_NUM; i++)
230 {
231 int gain = m_user_defined_gain[i];
232 CPlayer::GetInstance().SetEqualizer(i, gain);
233 m_sliders[i].SetPos(-gain);
234 UpdateChannelTip(i, gain); //更新鼠标提示
235 }
236 }
237
238 }
239 return 0;
240 }
241
242
OnDestroy()243 void CEqualizerDlg::OnDestroy()
244 {
245 CTabDlg::OnDestroy();
246
247 // TODO: 在此处添加消息处理程序代码
248 SaveConfig();
249 }
250