1 // MP3EncodeCfgDlg.cpp: 实现文件
2 //
3
4 #include "stdafx.h"
5 #include "MusicPlayer2.h"
6 #include "MP3EncodeCfgDlg.h"
7
8
9 // CMP3EncodeCfgDlg 对话框
10
IMPLEMENT_DYNAMIC(CMP3EncodeCfgDlg,CBaseDialog)11 IMPLEMENT_DYNAMIC(CMP3EncodeCfgDlg, CBaseDialog)
12
13 CMP3EncodeCfgDlg::CMP3EncodeCfgDlg(CWnd* pParent /*=nullptr*/)
14 : CBaseDialog(IDD_MP3_ENCODE_CFG_DIALOG, pParent)
15 {
16
17 }
18
~CMP3EncodeCfgDlg()19 CMP3EncodeCfgDlg::~CMP3EncodeCfgDlg()
20 {
21 }
22
EncodeParaToCmdline(MP3EncodePara & para)23 void CMP3EncodeCfgDlg::EncodeParaToCmdline(MP3EncodePara& para)
24 {
25 if (para.user_define_para)
26 return;
27 wchar_t buff[32];
28 switch (para.encode_type)
29 {
30 case 0:
31 swprintf_s(buff, L"-b %d -h", para.cbr_bitrate);
32 para.cmd_para = buff;
33 break;
34 case 1:
35 swprintf_s(buff, L"--abr %d -h", para.abr_bitrate);
36 para.cmd_para = buff;
37 break;
38 case 2:
39 swprintf_s(buff, L"-V %d -h", para.vbr_quality);
40 para.cmd_para = buff;
41 break;
42 default:
43 break;
44 }
45 if (para.joint_stereo)
46 para.cmd_para += L" -m j";
47 }
48
SetControlState()49 void CMP3EncodeCfgDlg::SetControlState()
50 {
51 EnableDlgCtrl(IDC_CBR_RADIO, !m_encode_para.user_define_para);
52 EnableDlgCtrl(IDC_ABR_RADIO, !m_encode_para.user_define_para);
53 EnableDlgCtrl(IDC_VBR_RADIO, !m_encode_para.user_define_para);
54 EnableDlgCtrl(IDC_CBR_RATE_COMBO, !m_encode_para.user_define_para && m_encode_para.encode_type == 0);
55 EnableDlgCtrl(IDC_ABR_RATE_COMBO, !m_encode_para.user_define_para && m_encode_para.encode_type == 1);
56 EnableDlgCtrl(IDC_SLIDER1, !m_encode_para.user_define_para && m_encode_para.encode_type == 2);
57 EnableDlgCtrl(IDC_JOINT_STEREO_CHECK, !m_encode_para.user_define_para);
58 m_encode_cmdline_edit.SetReadOnly(!m_encode_para.user_define_para);
59 SetDlgItemTextW(IDC_ENCODE_CMDLINE_EDIT, m_encode_para.cmd_para.c_str());
60 }
61
GetDialogName() const62 CString CMP3EncodeCfgDlg::GetDialogName() const
63 {
64 return L"Mp3EncodeOptDlg";
65 }
66
InitializeControls()67 bool CMP3EncodeCfgDlg::InitializeControls()
68 {
69 wstring temp;
70 temp = theApp.m_str_table.LoadText(L"TITLE_ENCODE_OPT_MP3");
71 SetWindowTextW(temp.c_str());
72 temp = theApp.m_str_table.LoadText(L"TXT_ENCODE_OPT_MP3_CBR");
73 SetDlgItemTextW(IDC_CBR_RADIO, temp.c_str());
74 // IDC_CBR_RATE_COMBO
75 temp = theApp.m_str_table.LoadText(L"TXT_ENCODE_OPT_MP3_ABR");
76 SetDlgItemTextW(IDC_ABR_RADIO, temp.c_str());
77 // IDC_ABR_RATE_COMBO
78 temp = theApp.m_str_table.LoadText(L"TXT_ENCODE_OPT_MP3_VBR");
79 SetDlgItemTextW(IDC_VBR_RADIO, temp.c_str());
80 temp = theApp.m_str_table.LoadText(L"TXT_ENCODE_OPT_MP3_VBR_QUALITY_SEL");
81 SetDlgItemTextW(IDC_TXT_ENCODE_OPT_MP3_VBR_QUALITY_SEL_STATIC, temp.c_str());
82 temp = theApp.m_str_table.LoadText(L"TXT_ENCODE_OPT_MP3_VBR_QUALITY_LOW");
83 SetDlgItemTextW(IDC_TXT_ENCODE_OPT_MP3_VBR_QUALITY_LOW_STATIC, temp.c_str());
84 temp = theApp.m_str_table.LoadText(L"TXT_ENCODE_OPT_MP3_VBR_QUALITY_HIGH");
85 SetDlgItemTextW(IDC_TXT_ENCODE_OPT_MP3_VBR_QUALITY_HIGH_STATIC, temp.c_str());
86 temp = theApp.m_str_table.LoadText(L"TXT_ENCODE_OPT_MP3_JOINT_STEREO");
87 SetDlgItemTextW(IDC_JOINT_STEREO_CHECK, temp.c_str());
88 temp = theApp.m_str_table.LoadText(L"TXT_ENCODE_OPT_MP3_SPECIFY_PARA");
89 SetDlgItemTextW(IDC_USER_CHECK, temp.c_str());
90 // IDC_ENCODE_CMDLINE_EDIT
91
92 RepositionTextBasedControls({
93 { CtrlTextInfo::L1, IDC_USER_CHECK, CtrlTextInfo::W16 },
94 { CtrlTextInfo::C0, IDC_ENCODE_CMDLINE_EDIT }
95 });
96 RepositionTextBasedControls({
97 { CtrlTextInfo::R1, IDOK, CtrlTextInfo::W32 },
98 { CtrlTextInfo::R2, IDCANCEL, CtrlTextInfo::W32 }
99 });
100 return true;
101 }
102
DoDataExchange(CDataExchange * pDX)103 void CMP3EncodeCfgDlg::DoDataExchange(CDataExchange* pDX)
104 {
105 CBaseDialog::DoDataExchange(pDX);
106 DDX_Control(pDX, IDC_CBR_RATE_COMBO, m_cbr_rate_combo);
107 DDX_Control(pDX, IDC_ABR_RATE_COMBO, m_abr_rate_combo);
108 DDX_Control(pDX, IDC_SLIDER1, m_vbr_qua_sld);
109 DDX_Control(pDX, IDC_ENCODE_CMDLINE_EDIT, m_encode_cmdline_edit);
110 }
111
112
BEGIN_MESSAGE_MAP(CMP3EncodeCfgDlg,CBaseDialog)113 BEGIN_MESSAGE_MAP(CMP3EncodeCfgDlg, CBaseDialog)
114 ON_CBN_SELCHANGE(IDC_CBR_RATE_COMBO, &CMP3EncodeCfgDlg::OnCbnSelchangeCbrRateCombo)
115 ON_CBN_SELCHANGE(IDC_ABR_RATE_COMBO, &CMP3EncodeCfgDlg::OnCbnSelchangeAbrRateCombo)
116 ON_BN_CLICKED(IDC_CBR_RADIO, &CMP3EncodeCfgDlg::OnBnClickedCbrRadio)
117 ON_BN_CLICKED(IDC_ABR_RADIO, &CMP3EncodeCfgDlg::OnBnClickedAbrRadio)
118 ON_BN_CLICKED(IDC_VBR_RADIO, &CMP3EncodeCfgDlg::OnBnClickedVbrRadio)
119 ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, &CMP3EncodeCfgDlg::OnNMCustomdrawSlider1)
120 ON_BN_CLICKED(IDC_JOINT_STEREO_CHECK, &CMP3EncodeCfgDlg::OnBnClickedJointStereoCheck)
121 ON_BN_CLICKED(IDC_USER_CHECK, &CMP3EncodeCfgDlg::OnBnClickedUserRadio)
122 END_MESSAGE_MAP()
123
124
125 // CMP3EncodeCfgDlg 消息处理程序
126
127
128 BOOL CMP3EncodeCfgDlg::OnInitDialog()
129 {
130 CBaseDialog::OnInitDialog();
131
132 // TODO: 在此添加额外的初始化
133 m_bitrate_list.emplace_back(L"32 kbps", 32);
134 m_bitrate_list.emplace_back(L"40 kbps", 40);
135 m_bitrate_list.emplace_back(L"64 kbps", 64);
136 m_bitrate_list.emplace_back(L"80 kbps", 80);
137 m_bitrate_list.emplace_back(L"96 kbps", 96);
138 m_bitrate_list.emplace_back(L"112 kbps", 112);
139 m_bitrate_list.emplace_back(L"128 kbps", 128);
140 m_bitrate_list.emplace_back(L"160 kbps", 160);
141 m_bitrate_list.emplace_back(L"192 kbps", 192);
142 m_bitrate_list.emplace_back(L"224 kbps", 224);
143 m_bitrate_list.emplace_back(L"256 kbps", 256);
144 m_bitrate_list.emplace_back(L"320 kbps", 320);
145
146 int index_cbr{}, index_abr{};
147 for (size_t i{}; i < m_bitrate_list.size(); ++i)
148 {
149 const auto& item = m_bitrate_list[i];
150 if (item.second == m_encode_para.cbr_bitrate)
151 index_cbr = i;
152 if (item.second == m_encode_para.abr_bitrate)
153 index_abr = i;
154 m_cbr_rate_combo.AddString(item.first.c_str());
155 m_abr_rate_combo.AddString(item.first.c_str());
156 }
157 m_cbr_rate_combo.SetCurSel(index_cbr);
158 m_abr_rate_combo.SetCurSel(index_abr);
159
160 switch (m_encode_para.encode_type)
161 {
162 case 0: CheckDlgButton(IDC_CBR_RADIO, TRUE); break;
163 case 1: CheckDlgButton(IDC_ABR_RADIO, TRUE); break;
164 case 2: CheckDlgButton(IDC_VBR_RADIO, TRUE); break;
165 default: break;
166 }
167
168 m_vbr_qua_sld.SetRange(0, 9);
169 m_vbr_qua_sld.SetPos(9 - m_encode_para.vbr_quality);
170
171 CheckDlgButton(IDC_JOINT_STEREO_CHECK, m_encode_para.joint_stereo);
172 CheckDlgButton(IDC_USER_CHECK, m_encode_para.user_define_para);
173
174 EncodeParaToCmdline(m_encode_para);
175 SetControlState();
176 return TRUE; // return TRUE unless you set the focus to a control
177 // 异常: OCX 属性页应返回 FALSE
178 }
179
180
OnCbnSelchangeCbrRateCombo()181 void CMP3EncodeCfgDlg::OnCbnSelchangeCbrRateCombo()
182 {
183 // TODO: 在此添加控件通知处理程序代码
184 int sel = m_cbr_rate_combo.GetCurSel();
185 if (sel >= 0 && sel < static_cast<int>(m_bitrate_list.size()))
186 m_encode_para.cbr_bitrate = m_bitrate_list[sel].second;
187 EncodeParaToCmdline(m_encode_para);
188 SetControlState();
189 }
190
191
OnCbnSelchangeAbrRateCombo()192 void CMP3EncodeCfgDlg::OnCbnSelchangeAbrRateCombo()
193 {
194 // TODO: 在此添加控件通知处理程序代码
195 int sel = m_abr_rate_combo.GetCurSel();
196 if (sel >= 0 && sel < static_cast<int>(m_bitrate_list.size()))
197 m_encode_para.abr_bitrate = m_bitrate_list[sel].second;
198 EncodeParaToCmdline(m_encode_para);
199 SetControlState();
200 }
201
202
OnBnClickedCbrRadio()203 void CMP3EncodeCfgDlg::OnBnClickedCbrRadio()
204 {
205 // TODO: 在此添加控件通知处理程序代码
206 m_encode_para.encode_type = 0;
207 EncodeParaToCmdline(m_encode_para);
208 SetControlState();
209 }
210
211
OnBnClickedAbrRadio()212 void CMP3EncodeCfgDlg::OnBnClickedAbrRadio()
213 {
214 // TODO: 在此添加控件通知处理程序代码
215 m_encode_para.encode_type = 1;
216 EncodeParaToCmdline(m_encode_para);
217 SetControlState();
218 }
219
220
OnBnClickedVbrRadio()221 void CMP3EncodeCfgDlg::OnBnClickedVbrRadio()
222 {
223 // TODO: 在此添加控件通知处理程序代码
224 m_encode_para.encode_type = 2;
225 EncodeParaToCmdline(m_encode_para);
226 SetControlState();
227 }
228
229
OnNMCustomdrawSlider1(NMHDR * pNMHDR,LRESULT * pResult)230 void CMP3EncodeCfgDlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
231 {
232 LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
233 // TODO: 在此添加控件通知处理程序代码
234 m_encode_para.vbr_quality = 9 - m_vbr_qua_sld.GetPos();
235 EncodeParaToCmdline(m_encode_para);
236 SetControlState();
237 *pResult = 0;
238 }
239
240
OnBnClickedJointStereoCheck()241 void CMP3EncodeCfgDlg::OnBnClickedJointStereoCheck()
242 {
243 // TODO: 在此添加控件通知处理程序代码
244 m_encode_para.joint_stereo = (IsDlgButtonChecked(IDC_JOINT_STEREO_CHECK) != 0);
245 EncodeParaToCmdline(m_encode_para);
246 SetControlState();
247 }
248
249
OnBnClickedUserRadio()250 void CMP3EncodeCfgDlg::OnBnClickedUserRadio()
251 {
252 // TODO: 在此添加控件通知处理程序代码
253 m_encode_para.user_define_para = (IsDlgButtonChecked(IDC_USER_CHECK) != 0);
254 EncodeParaToCmdline(m_encode_para);
255 SetControlState();
256 }
257
258
OnOK()259 void CMP3EncodeCfgDlg::OnOK()
260 {
261 // TODO: 在此添加专用代码和/或调用基类
262 CString str;
263 m_encode_cmdline_edit.GetWindowTextW(str);
264 m_encode_para.cmd_para = str;
265
266 CBaseDialog::OnOK();
267 }
268