xref: /MusicPlayer2/MusicPlayer2/OptionsDlg.cpp (revision a87de17200448923cd61634f894b94d41827fa4c)
1877f5f92SZhongYang // OptionsDlg.cpp : 实现文件
2f5eefe2fSzhongyang219 //
3f5eefe2fSzhongyang219 
4f5eefe2fSzhongyang219 #include "stdafx.h"
5f5eefe2fSzhongyang219 #include "MusicPlayer2.h"
6f5eefe2fSzhongyang219 #include "OptionsDlg.h"
7f5eefe2fSzhongyang219 
8f5eefe2fSzhongyang219 
9877f5f92SZhongYang // COptionsDlg 对话框
10f5eefe2fSzhongyang219 
11d5347edbSZhong Yang IMPLEMENT_DYNAMIC(COptionsDlg, CBaseDialog)
12f5eefe2fSzhongyang219 
13f5eefe2fSzhongyang219 COptionsDlg::COptionsDlg(CWnd* pParent /*=NULL*/)
14d5347edbSZhong Yang 	: CBaseDialog(IDD_OPTIONS_DIALOG, pParent)
15f5eefe2fSzhongyang219 {
16f5eefe2fSzhongyang219 
17f5eefe2fSzhongyang219 }
18f5eefe2fSzhongyang219 
19f5eefe2fSzhongyang219 COptionsDlg::~COptionsDlg()
20f5eefe2fSzhongyang219 {
21f5eefe2fSzhongyang219 }
22f5eefe2fSzhongyang219 
23d5347edbSZhong Yang CString COptionsDlg::GetDialogName() const
24d5347edbSZhong Yang {
25d5347edbSZhong Yang     return _T("OptionsDlg");
26d5347edbSZhong Yang }
27d5347edbSZhong Yang 
286ff78c2aSlrisora bool COptionsDlg::InitializeControls()
296ff78c2aSlrisora {
306ff78c2aSlrisora     wstring temp;
316ff78c2aSlrisora     temp = theApp.m_str_table.LoadText(L"TITLE_OPT");
326ff78c2aSlrisora     SetWindowTextW(temp.c_str());
336ff78c2aSlrisora     temp = theApp.m_str_table.LoadText(L"TXT_APPLY");
346ff78c2aSlrisora     SetDlgItemTextW(IDC_APPLY_BUTTON, temp.c_str());
356ff78c2aSlrisora 
366ff78c2aSlrisora     RepositionTextBasedControls({
376ff78c2aSlrisora         { CtrlTextInfo::R1, IDOK, CtrlTextInfo::W32 },
386ff78c2aSlrisora         { CtrlTextInfo::R2, IDCANCEL, CtrlTextInfo::W32 },
396ff78c2aSlrisora         { CtrlTextInfo::R3, IDC_APPLY_BUTTON, CtrlTextInfo::W32 }
406ff78c2aSlrisora         });
416ff78c2aSlrisora     return true;
426ff78c2aSlrisora }
436ff78c2aSlrisora 
44f5eefe2fSzhongyang219 void COptionsDlg::DoDataExchange(CDataExchange* pDX)
45f5eefe2fSzhongyang219 {
46d5347edbSZhong Yang 	CBaseDialog::DoDataExchange(pDX);
47f5eefe2fSzhongyang219 	DDX_Control(pDX, IDC_OPTIONS_TAB, m_tab);
48f5eefe2fSzhongyang219 }
49f5eefe2fSzhongyang219 
50f5eefe2fSzhongyang219 
51d5347edbSZhong Yang BEGIN_MESSAGE_MAP(COptionsDlg, CBaseDialog)
525d218daaSZhong Yang 	ON_BN_CLICKED(IDC_APPLY_BUTTON, &COptionsDlg::OnBnClickedApplyButton)
53b26f7c9eSZhong Yang 	ON_WM_DESTROY()
5497b7b8c3Szhongyang     ON_WM_GETMINMAXINFO()
5597b7b8c3Szhongyang     ON_WM_SIZE()
56f5eefe2fSzhongyang219 END_MESSAGE_MAP()
57f5eefe2fSzhongyang219 
58f5eefe2fSzhongyang219 
59877f5f92SZhongYang // COptionsDlg 消息处理程序
60f5eefe2fSzhongyang219 
61f5eefe2fSzhongyang219 
62f5eefe2fSzhongyang219 BOOL COptionsDlg::OnInitDialog()
63f5eefe2fSzhongyang219 {
64d5347edbSZhong Yang 	CBaseDialog::OnInitDialog();
65f5eefe2fSzhongyang219 
66877f5f92SZhongYang 	// TODO:  在此添加额外的初始化
67f5eefe2fSzhongyang219 
68*a87de172Slrisora     SetIcon(IconMgr::IconType::IT_Setting, FALSE);
6997b7b8c3Szhongyang 
70877f5f92SZhongYang 	//创建子对话框
71bb1ccb84SZhong Yang 	m_tab1_dlg.Create(IDD_LYRIC_SETTING_DIALOG);
72bb1ccb84SZhong Yang 	m_tab2_dlg.Create(IDD_APPEREANCE_SETTING_DLG);
73bb1ccb84SZhong Yang 	m_tab3_dlg.Create(IDD_DATA_SETTINGS_DIALOG);
74bb1ccb84SZhong Yang 	m_tab4_dlg.Create(IDD_PLAY_SETTING_DIALOG);
75199afb4bSzhongyang 	m_media_lib_dlg.Create(IDD_MEDIA_LIB_SETTING_DIALOG);
769afaa4f1SZhong Yang 	m_tab5_dlg.Create(IDD_HOT_KEY_SETTINGS_DIALOG);
77bb1ccb84SZhong Yang 
78877f5f92SZhongYang 	//保存子对话框
7997b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab1_dlg);
8097b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab2_dlg);
8197b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab3_dlg);
8297b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab4_dlg);
83199afb4bSzhongyang 	m_tab_vect.push_back(&m_media_lib_dlg);
8497b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab5_dlg);
853cbff0c7SZhong Yang 
86877f5f92SZhongYang 	//获取子对话框的初始高度
8797b7b8c3Szhongyang 	for (const auto* pDlg : m_tab_vect)
883cbff0c7SZhong Yang 	{
893cbff0c7SZhong Yang 		CRect rect;
903cbff0c7SZhong Yang 		pDlg->GetWindowRect(rect);
9197b7b8c3Szhongyang 		m_tab_height.push_back(rect.Height());
923cbff0c7SZhong Yang 	}
933cbff0c7SZhong Yang 
94877f5f92SZhongYang 	//添加对话框
9526cefa3cSlrisora 	m_tab.AddWindow(&m_tab1_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_LRC").c_str());
9626cefa3cSlrisora 	m_tab.AddWindow(&m_tab2_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_APC").c_str());
9726cefa3cSlrisora 	m_tab.AddWindow(&m_tab3_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_DATA").c_str());
9826cefa3cSlrisora 	m_tab.AddWindow(&m_tab4_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_PLAY").c_str());
9926cefa3cSlrisora 	m_tab.AddWindow(&m_media_lib_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_MEDIA_LIB").c_str());
10026cefa3cSlrisora 	m_tab.AddWindow(&m_tab5_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_HOT_KEY").c_str());
101bb1ccb84SZhong Yang 
1025a7e7f92Szhongyang219     //为每个标签添加图标
1035a7e7f92Szhongyang219     CImageList ImageList;
1045a7e7f92Szhongyang219     ImageList.Create(theApp.DPI(16), theApp.DPI(16), ILC_COLOR32 | ILC_MASK, 2, 2);
1055a7e7f92Szhongyang219     ImageList.Add(theApp.m_icon_set.lyric.GetIcon(true));
1065a7e7f92Szhongyang219     ImageList.Add(theApp.m_icon_set.skin.GetIcon(true));
1075a7e7f92Szhongyang219     ImageList.Add(theApp.m_icon_set.setting.GetIcon(true));
1085a7e7f92Szhongyang219     ImageList.Add(theApp.m_icon_set.play_new.GetIcon(true));
1095a7e7f92Szhongyang219     ImageList.Add(theApp.m_icon_set.media_lib.GetIcon(true));
1105a7e7f92Szhongyang219     ImageList.Add(theApp.m_icon_set.hot_key);
1115a7e7f92Szhongyang219     m_tab.SetImageList(&ImageList);
1125a7e7f92Szhongyang219     ImageList.Detach();
1135a7e7f92Szhongyang219 
1145a7e7f92Szhongyang219     m_tab.SetItemSize(CSize(theApp.DPI(60), theApp.DPI(24)));
1155a7e7f92Szhongyang219     m_tab.AdjustTabWindowSize();
1165a7e7f92Szhongyang219 
117877f5f92SZhongYang 	//为每个子窗口设置滚动信息
11897b7b8c3Szhongyang 	for (size_t i = 0; i < m_tab_vect.size(); i++)
1193cbff0c7SZhong Yang 	{
12097b7b8c3Szhongyang 		m_tab_vect[i]->SetScrollbarInfo(m_tab.m_tab_rect.Height(), m_tab_height[i]);
1213cbff0c7SZhong Yang 	}
1223cbff0c7SZhong Yang 
1235f54c046SZhong Yang     if (m_tab_selected < 0 || m_tab_selected >= m_tab.GetItemCount())
1245f54c046SZhong Yang         m_tab_selected = 0;
125bb1ccb84SZhong Yang 	m_tab.SetCurTab(m_tab_selected);
126bb1ccb84SZhong Yang 
127f5eefe2fSzhongyang219 	return TRUE;  // return TRUE unless you set the focus to a control
128877f5f92SZhongYang 				  // 异常: OCX 属性页应返回 FALSE
129f5eefe2fSzhongyang219 }
130f5eefe2fSzhongyang219 
131575ff337SZhong Yang void COptionsDlg::OnOK()
132575ff337SZhong Yang {
133877f5f92SZhongYang 	// TODO: 在此添加专用代码和/或调用基类
13409e0bd68Szhongyang219     for (const auto& tab : m_tab_vect)
13509e0bd68Szhongyang219     {
13609e0bd68Szhongyang219         tab->GetDataFromUi();
13709e0bd68Szhongyang219     }
138575ff337SZhong Yang 
139d5347edbSZhong Yang 	CBaseDialog::OnOK();
140575ff337SZhong Yang }
1415d218daaSZhong Yang 
1425d218daaSZhong Yang 
1435d218daaSZhong Yang void COptionsDlg::OnBnClickedApplyButton()
1445d218daaSZhong Yang {
145877f5f92SZhongYang 	// TODO: 在此添加控件通知处理程序代码
14609e0bd68Szhongyang219     for (const auto& tab : m_tab_vect)
14709e0bd68Szhongyang219     {
14809e0bd68Szhongyang219         tab->GetDataFromUi();
14909e0bd68Szhongyang219     }
15009e0bd68Szhongyang219 
1515d218daaSZhong Yang 	::SendMessage(theApp.m_pMainWnd->GetSafeHwnd(), WM_SETTINGS_APPLIED, (WPARAM)this, 0);
152f94887a5Slrisora 
153f94887a5Slrisora     for (const auto& tab : m_tab_vect)
154f94887a5Slrisora     {
155f94887a5Slrisora         tab->ApplyDataToUi();
156f94887a5Slrisora     }
1575d218daaSZhong Yang }
158b26f7c9eSZhong Yang 
159b26f7c9eSZhong Yang 
160b26f7c9eSZhong Yang void COptionsDlg::OnDestroy()
161b26f7c9eSZhong Yang {
162d5347edbSZhong Yang 	CBaseDialog::OnDestroy();
163b26f7c9eSZhong Yang 
164877f5f92SZhongYang 	// TODO: 在此处添加消息处理程序代码
165b26f7c9eSZhong Yang 	m_tab_selected = m_tab.GetCurSel();
166b26f7c9eSZhong Yang }
16797b7b8c3Szhongyang 
16897b7b8c3Szhongyang 
16997b7b8c3Szhongyang void COptionsDlg::OnSize(UINT nType, int cx, int cy)
17097b7b8c3Szhongyang {
171d5347edbSZhong Yang     CBaseDialog::OnSize(nType, cx, cy);
17297b7b8c3Szhongyang     if (nType != SIZE_MINIMIZED)
17397b7b8c3Szhongyang     {
17451ca5229Slrisora         //为每个子窗口更新滚动信息
17597b7b8c3Szhongyang         for (size_t i = 0; i < m_tab_vect.size(); i++)
17697b7b8c3Szhongyang         {
17797b7b8c3Szhongyang             m_tab_vect[i]->SetScrollbarInfo(m_tab.m_tab_rect.Height(), m_tab_height[i]);
17897b7b8c3Szhongyang         }
17997b7b8c3Szhongyang     }
18097b7b8c3Szhongyang }
181