xref: /MusicPlayer2/MusicPlayer2/OptionsDlg.cpp (revision 6ff78c2af22a2540d4da0cd487a360b3fffc6e91)
1877f5f92SZhongYang // OptionsDlg.cpp : 实现文件
2f5eefe2fSzhongyang219 //
3f5eefe2fSzhongyang219 
4f5eefe2fSzhongyang219 #include "stdafx.h"
5f5eefe2fSzhongyang219 #include "MusicPlayer2.h"
6f5eefe2fSzhongyang219 #include "OptionsDlg.h"
7f5eefe2fSzhongyang219 #include "afxdialogex.h"
8f5eefe2fSzhongyang219 
9f5eefe2fSzhongyang219 
10877f5f92SZhongYang // COptionsDlg 对话框
11f5eefe2fSzhongyang219 
12d5347edbSZhong Yang IMPLEMENT_DYNAMIC(COptionsDlg, CBaseDialog)
13f5eefe2fSzhongyang219 
14f5eefe2fSzhongyang219 COptionsDlg::COptionsDlg(CWnd* pParent /*=NULL*/)
15d5347edbSZhong Yang 	: CBaseDialog(IDD_OPTIONS_DIALOG, pParent)
16f5eefe2fSzhongyang219 {
17f5eefe2fSzhongyang219 
18f5eefe2fSzhongyang219 }
19f5eefe2fSzhongyang219 
20f5eefe2fSzhongyang219 COptionsDlg::~COptionsDlg()
21f5eefe2fSzhongyang219 {
22f5eefe2fSzhongyang219 }
23f5eefe2fSzhongyang219 
24d5347edbSZhong Yang CString COptionsDlg::GetDialogName() const
25d5347edbSZhong Yang {
26d5347edbSZhong Yang     return _T("OptionsDlg");
27d5347edbSZhong Yang }
28d5347edbSZhong Yang 
29*6ff78c2aSlrisora bool COptionsDlg::InitializeControls()
30*6ff78c2aSlrisora {
31*6ff78c2aSlrisora     wstring temp;
32*6ff78c2aSlrisora     temp = theApp.m_str_table.LoadText(L"TITLE_OPT");
33*6ff78c2aSlrisora     SetWindowTextW(temp.c_str());
34*6ff78c2aSlrisora     temp = theApp.m_str_table.LoadText(L"TXT_APPLY");
35*6ff78c2aSlrisora     SetDlgItemTextW(IDC_APPLY_BUTTON, temp.c_str());
36*6ff78c2aSlrisora 
37*6ff78c2aSlrisora     RepositionTextBasedControls({
38*6ff78c2aSlrisora         { CtrlTextInfo::R1, IDOK, CtrlTextInfo::W32 },
39*6ff78c2aSlrisora         { CtrlTextInfo::R2, IDCANCEL, CtrlTextInfo::W32 },
40*6ff78c2aSlrisora         { CtrlTextInfo::R3, IDC_APPLY_BUTTON, CtrlTextInfo::W32 }
41*6ff78c2aSlrisora         });
42*6ff78c2aSlrisora     return true;
43*6ff78c2aSlrisora }
44*6ff78c2aSlrisora 
45f5eefe2fSzhongyang219 void COptionsDlg::DoDataExchange(CDataExchange* pDX)
46f5eefe2fSzhongyang219 {
47d5347edbSZhong Yang 	CBaseDialog::DoDataExchange(pDX);
48f5eefe2fSzhongyang219 	DDX_Control(pDX, IDC_OPTIONS_TAB, m_tab);
49f5eefe2fSzhongyang219 }
50f5eefe2fSzhongyang219 
51f5eefe2fSzhongyang219 
52d5347edbSZhong Yang BEGIN_MESSAGE_MAP(COptionsDlg, CBaseDialog)
535d218daaSZhong Yang 	ON_BN_CLICKED(IDC_APPLY_BUTTON, &COptionsDlg::OnBnClickedApplyButton)
54b26f7c9eSZhong Yang 	ON_WM_DESTROY()
5597b7b8c3Szhongyang     ON_WM_GETMINMAXINFO()
5697b7b8c3Szhongyang     ON_WM_SIZE()
57f5eefe2fSzhongyang219 END_MESSAGE_MAP()
58f5eefe2fSzhongyang219 
59f5eefe2fSzhongyang219 
60877f5f92SZhongYang // COptionsDlg 消息处理程序
61f5eefe2fSzhongyang219 
62f5eefe2fSzhongyang219 
63f5eefe2fSzhongyang219 BOOL COptionsDlg::OnInitDialog()
64f5eefe2fSzhongyang219 {
65d5347edbSZhong Yang 	CBaseDialog::OnInitDialog();
66f5eefe2fSzhongyang219 
67877f5f92SZhongYang 	// TODO:  在此添加额外的初始化
68f5eefe2fSzhongyang219 
6999a4aeeaSZhong Yang     SetIcon(theApp.m_icon_set.setting.GetIcon(true), FALSE);
7097b7b8c3Szhongyang 
71877f5f92SZhongYang 	//创建子对话框
72bb1ccb84SZhong Yang 	m_tab1_dlg.Create(IDD_LYRIC_SETTING_DIALOG);
73bb1ccb84SZhong Yang 	m_tab2_dlg.Create(IDD_APPEREANCE_SETTING_DLG);
74bb1ccb84SZhong Yang 	m_tab3_dlg.Create(IDD_DATA_SETTINGS_DIALOG);
75bb1ccb84SZhong Yang 	m_tab4_dlg.Create(IDD_PLAY_SETTING_DIALOG);
76199afb4bSzhongyang 	m_media_lib_dlg.Create(IDD_MEDIA_LIB_SETTING_DIALOG);
779afaa4f1SZhong Yang 	m_tab5_dlg.Create(IDD_HOT_KEY_SETTINGS_DIALOG);
78bb1ccb84SZhong Yang 
79877f5f92SZhongYang 	//保存子对话框
8097b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab1_dlg);
8197b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab2_dlg);
8297b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab3_dlg);
8397b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab4_dlg);
84199afb4bSzhongyang 	m_tab_vect.push_back(&m_media_lib_dlg);
8597b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab5_dlg);
863cbff0c7SZhong Yang 
87877f5f92SZhongYang 	//获取子对话框的初始高度
8897b7b8c3Szhongyang 	for (const auto* pDlg : m_tab_vect)
893cbff0c7SZhong Yang 	{
903cbff0c7SZhong Yang 		CRect rect;
913cbff0c7SZhong Yang 		pDlg->GetWindowRect(rect);
9297b7b8c3Szhongyang 		m_tab_height.push_back(rect.Height());
933cbff0c7SZhong Yang 	}
943cbff0c7SZhong Yang 
95877f5f92SZhongYang 	//添加对话框
9626cefa3cSlrisora 	m_tab.AddWindow(&m_tab1_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_LRC").c_str());
9726cefa3cSlrisora 	m_tab.AddWindow(&m_tab2_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_APC").c_str());
9826cefa3cSlrisora 	m_tab.AddWindow(&m_tab3_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_DATA").c_str());
9926cefa3cSlrisora 	m_tab.AddWindow(&m_tab4_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_PLAY").c_str());
10026cefa3cSlrisora 	m_tab.AddWindow(&m_media_lib_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_MEDIA_LIB").c_str());
10126cefa3cSlrisora 	m_tab.AddWindow(&m_tab5_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_HOT_KEY").c_str());
102bb1ccb84SZhong Yang 
1035a7e7f92Szhongyang219     //为每个标签添加图标
1045a7e7f92Szhongyang219     CImageList ImageList;
1055a7e7f92Szhongyang219     ImageList.Create(theApp.DPI(16), theApp.DPI(16), ILC_COLOR32 | ILC_MASK, 2, 2);
1065a7e7f92Szhongyang219     ImageList.Add(theApp.m_icon_set.lyric.GetIcon(true));
1075a7e7f92Szhongyang219     ImageList.Add(theApp.m_icon_set.skin.GetIcon(true));
1085a7e7f92Szhongyang219     ImageList.Add(theApp.m_icon_set.setting.GetIcon(true));
1095a7e7f92Szhongyang219     ImageList.Add(theApp.m_icon_set.play_new.GetIcon(true));
1105a7e7f92Szhongyang219     ImageList.Add(theApp.m_icon_set.media_lib.GetIcon(true));
1115a7e7f92Szhongyang219     ImageList.Add(theApp.m_icon_set.hot_key);
1125a7e7f92Szhongyang219     m_tab.SetImageList(&ImageList);
1135a7e7f92Szhongyang219     ImageList.Detach();
1145a7e7f92Szhongyang219 
1155a7e7f92Szhongyang219     m_tab.SetItemSize(CSize(theApp.DPI(60), theApp.DPI(24)));
1165a7e7f92Szhongyang219     m_tab.AdjustTabWindowSize();
1175a7e7f92Szhongyang219 
118877f5f92SZhongYang 	//为每个子窗口设置滚动信息
11997b7b8c3Szhongyang 	for (size_t i = 0; i < m_tab_vect.size(); i++)
1203cbff0c7SZhong Yang 	{
12197b7b8c3Szhongyang 		m_tab_vect[i]->SetScrollbarInfo(m_tab.m_tab_rect.Height(), m_tab_height[i]);
1223cbff0c7SZhong Yang 	}
1233cbff0c7SZhong Yang 
1245f54c046SZhong Yang     if (m_tab_selected < 0 || m_tab_selected >= m_tab.GetItemCount())
1255f54c046SZhong Yang         m_tab_selected = 0;
126bb1ccb84SZhong Yang 	m_tab.SetCurTab(m_tab_selected);
127bb1ccb84SZhong Yang 
128f5eefe2fSzhongyang219 	return TRUE;  // return TRUE unless you set the focus to a control
129877f5f92SZhongYang 				  // 异常: OCX 属性页应返回 FALSE
130f5eefe2fSzhongyang219 }
131f5eefe2fSzhongyang219 
132575ff337SZhong Yang void COptionsDlg::OnOK()
133575ff337SZhong Yang {
134877f5f92SZhongYang 	// TODO: 在此添加专用代码和/或调用基类
13509e0bd68Szhongyang219     for (const auto& tab : m_tab_vect)
13609e0bd68Szhongyang219     {
13709e0bd68Szhongyang219         tab->GetDataFromUi();
13809e0bd68Szhongyang219     }
139575ff337SZhong Yang 
140d5347edbSZhong Yang 	CBaseDialog::OnOK();
141575ff337SZhong Yang }
1425d218daaSZhong Yang 
1435d218daaSZhong Yang 
1445d218daaSZhong Yang void COptionsDlg::OnBnClickedApplyButton()
1455d218daaSZhong Yang {
146877f5f92SZhongYang 	// TODO: 在此添加控件通知处理程序代码
14709e0bd68Szhongyang219     for (const auto& tab : m_tab_vect)
14809e0bd68Szhongyang219     {
14909e0bd68Szhongyang219         tab->GetDataFromUi();
15009e0bd68Szhongyang219     }
15109e0bd68Szhongyang219 
1525d218daaSZhong Yang 	::SendMessage(theApp.m_pMainWnd->GetSafeHwnd(), WM_SETTINGS_APPLIED, (WPARAM)this, 0);
153f94887a5Slrisora 
154f94887a5Slrisora     for (const auto& tab : m_tab_vect)
155f94887a5Slrisora     {
156f94887a5Slrisora         tab->ApplyDataToUi();
157f94887a5Slrisora     }
1585d218daaSZhong Yang }
159b26f7c9eSZhong Yang 
160b26f7c9eSZhong Yang 
161b26f7c9eSZhong Yang void COptionsDlg::OnDestroy()
162b26f7c9eSZhong Yang {
163d5347edbSZhong Yang 	CBaseDialog::OnDestroy();
164b26f7c9eSZhong Yang 
165877f5f92SZhongYang 	// TODO: 在此处添加消息处理程序代码
166b26f7c9eSZhong Yang 	m_tab_selected = m_tab.GetCurSel();
167b26f7c9eSZhong Yang }
16897b7b8c3Szhongyang 
16997b7b8c3Szhongyang 
17097b7b8c3Szhongyang void COptionsDlg::OnSize(UINT nType, int cx, int cy)
17197b7b8c3Szhongyang {
172d5347edbSZhong Yang     CBaseDialog::OnSize(nType, cx, cy);
17397b7b8c3Szhongyang     if (nType != SIZE_MINIMIZED)
17497b7b8c3Szhongyang     {
175877f5f92SZhongYang         //为每个子窗口设置滚动信息
17697b7b8c3Szhongyang         for (size_t i = 0; i < m_tab_vect.size(); i++)
17797b7b8c3Szhongyang         {
17897b7b8c3Szhongyang             m_tab_vect[i]->ResetScroll();
17997b7b8c3Szhongyang             m_tab_vect[i]->SetScrollbarInfo(m_tab.m_tab_rect.Height(), m_tab_height[i]);
18097b7b8c3Szhongyang         }
18197b7b8c3Szhongyang 
18297b7b8c3Szhongyang     }
18397b7b8c3Szhongyang 
184877f5f92SZhongYang     // TODO: 在此处添加消息处理程序代码
18597b7b8c3Szhongyang }
186