xref: /MusicPlayer2/MusicPlayer2/MP3EncodeCfgDlg.cpp (revision 6ff78c2af22a2540d4da0cd487a360b3fffc6e91)
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