xref: /MusicPlayer2/MusicPlayer2/OptionsDlg.cpp (revision f94887a5e9b492e0a68f2a4f3952bd18d2f5364c)
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 
29f5eefe2fSzhongyang219 void COptionsDlg::DoDataExchange(CDataExchange* pDX)
30f5eefe2fSzhongyang219 {
31d5347edbSZhong Yang 	CBaseDialog::DoDataExchange(pDX);
32f5eefe2fSzhongyang219 	DDX_Control(pDX, IDC_OPTIONS_TAB, m_tab);
33f5eefe2fSzhongyang219 }
34f5eefe2fSzhongyang219 
35f5eefe2fSzhongyang219 
36d5347edbSZhong Yang BEGIN_MESSAGE_MAP(COptionsDlg, CBaseDialog)
375d218daaSZhong Yang 	ON_BN_CLICKED(IDC_APPLY_BUTTON, &COptionsDlg::OnBnClickedApplyButton)
38b26f7c9eSZhong Yang 	ON_WM_DESTROY()
3997b7b8c3Szhongyang     ON_WM_GETMINMAXINFO()
4097b7b8c3Szhongyang     ON_WM_SIZE()
41f5eefe2fSzhongyang219 END_MESSAGE_MAP()
42f5eefe2fSzhongyang219 
43f5eefe2fSzhongyang219 
44877f5f92SZhongYang // COptionsDlg 消息处理程序
45f5eefe2fSzhongyang219 
46f5eefe2fSzhongyang219 
47f5eefe2fSzhongyang219 BOOL COptionsDlg::OnInitDialog()
48f5eefe2fSzhongyang219 {
49d5347edbSZhong Yang 	CBaseDialog::OnInitDialog();
50f5eefe2fSzhongyang219 
51877f5f92SZhongYang 	// TODO:  在此添加额外的初始化
52f5eefe2fSzhongyang219 
5399a4aeeaSZhong Yang     SetIcon(theApp.m_icon_set.setting.GetIcon(true), FALSE);
5497b7b8c3Szhongyang 
55877f5f92SZhongYang 	//创建子对话框
56bb1ccb84SZhong Yang 	m_tab1_dlg.Create(IDD_LYRIC_SETTING_DIALOG);
57bb1ccb84SZhong Yang 	m_tab2_dlg.Create(IDD_APPEREANCE_SETTING_DLG);
58bb1ccb84SZhong Yang 	m_tab3_dlg.Create(IDD_DATA_SETTINGS_DIALOG);
59bb1ccb84SZhong Yang 	m_tab4_dlg.Create(IDD_PLAY_SETTING_DIALOG);
60199afb4bSzhongyang 	m_media_lib_dlg.Create(IDD_MEDIA_LIB_SETTING_DIALOG);
619afaa4f1SZhong Yang 	m_tab5_dlg.Create(IDD_HOT_KEY_SETTINGS_DIALOG);
62bb1ccb84SZhong Yang 
63877f5f92SZhongYang 	//保存子对话框
6497b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab1_dlg);
6597b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab2_dlg);
6697b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab3_dlg);
6797b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab4_dlg);
68199afb4bSzhongyang 	m_tab_vect.push_back(&m_media_lib_dlg);
6997b7b8c3Szhongyang 	m_tab_vect.push_back(&m_tab5_dlg);
703cbff0c7SZhong Yang 
71877f5f92SZhongYang 	//获取子对话框的初始高度
7297b7b8c3Szhongyang 	for (const auto* pDlg : m_tab_vect)
733cbff0c7SZhong Yang 	{
743cbff0c7SZhong Yang 		CRect rect;
753cbff0c7SZhong Yang 		pDlg->GetWindowRect(rect);
7697b7b8c3Szhongyang 		m_tab_height.push_back(rect.Height());
773cbff0c7SZhong Yang 	}
783cbff0c7SZhong Yang 
79877f5f92SZhongYang 	//添加对话框
80d9d0c25bSZhong Yang 	m_tab.AddWindow(&m_tab1_dlg, CCommon::LoadText(IDS_LYRIC_SETTINGS));
81d9d0c25bSZhong Yang 	m_tab.AddWindow(&m_tab2_dlg, CCommon::LoadText(IDS_APPEARANCE_SETTINGS));
82d9d0c25bSZhong Yang 	m_tab.AddWindow(&m_tab3_dlg, CCommon::LoadText(IDS_GENERAL_SETTINGS));
83d9d0c25bSZhong Yang 	m_tab.AddWindow(&m_tab4_dlg, CCommon::LoadText(IDS_PLAY_SETTINGS));
84199afb4bSzhongyang 	m_tab.AddWindow(&m_media_lib_dlg, CCommon::LoadText(IDS_MEDIA_LIB));
85d9d0c25bSZhong Yang 	m_tab.AddWindow(&m_tab5_dlg, CCommon::LoadText(IDS_GLOBLE_HOTKEY));
86bb1ccb84SZhong Yang 
87877f5f92SZhongYang 	//为每个子窗口设置滚动信息
8897b7b8c3Szhongyang 	for (size_t i = 0; i < m_tab_vect.size(); i++)
893cbff0c7SZhong Yang 	{
9097b7b8c3Szhongyang 		m_tab_vect[i]->SetScrollbarInfo(m_tab.m_tab_rect.Height(), m_tab_height[i]);
913cbff0c7SZhong Yang 	}
923cbff0c7SZhong Yang 
935f54c046SZhong Yang     if (m_tab_selected < 0 || m_tab_selected >= m_tab.GetItemCount())
945f54c046SZhong Yang         m_tab_selected = 0;
95bb1ccb84SZhong Yang 	m_tab.SetCurTab(m_tab_selected);
96bb1ccb84SZhong Yang 
97f5eefe2fSzhongyang219 	return TRUE;  // return TRUE unless you set the focus to a control
98877f5f92SZhongYang 				  // 异常: OCX 属性页应返回 FALSE
99f5eefe2fSzhongyang219 }
100f5eefe2fSzhongyang219 
101575ff337SZhong Yang void COptionsDlg::OnOK()
102575ff337SZhong Yang {
103877f5f92SZhongYang 	// TODO: 在此添加专用代码和/或调用基类
10409e0bd68Szhongyang219     for (const auto& tab : m_tab_vect)
10509e0bd68Szhongyang219     {
10609e0bd68Szhongyang219         tab->GetDataFromUi();
10709e0bd68Szhongyang219     }
108575ff337SZhong Yang 
109d5347edbSZhong Yang 	CBaseDialog::OnOK();
110575ff337SZhong Yang }
1115d218daaSZhong Yang 
1125d218daaSZhong Yang 
1135d218daaSZhong Yang void COptionsDlg::OnBnClickedApplyButton()
1145d218daaSZhong Yang {
115877f5f92SZhongYang 	// TODO: 在此添加控件通知处理程序代码
11609e0bd68Szhongyang219     for (const auto& tab : m_tab_vect)
11709e0bd68Szhongyang219     {
11809e0bd68Szhongyang219         tab->GetDataFromUi();
11909e0bd68Szhongyang219     }
12009e0bd68Szhongyang219 
1215d218daaSZhong Yang 	::SendMessage(theApp.m_pMainWnd->GetSafeHwnd(), WM_SETTINGS_APPLIED, (WPARAM)this, 0);
122*f94887a5Slrisora 
123*f94887a5Slrisora     for (const auto& tab : m_tab_vect)
124*f94887a5Slrisora     {
125*f94887a5Slrisora         tab->ApplyDataToUi();
126*f94887a5Slrisora     }
1275d218daaSZhong Yang }
128b26f7c9eSZhong Yang 
129b26f7c9eSZhong Yang 
130b26f7c9eSZhong Yang void COptionsDlg::OnDestroy()
131b26f7c9eSZhong Yang {
132d5347edbSZhong Yang 	CBaseDialog::OnDestroy();
133b26f7c9eSZhong Yang 
134877f5f92SZhongYang 	// TODO: 在此处添加消息处理程序代码
135b26f7c9eSZhong Yang 	m_tab_selected = m_tab.GetCurSel();
136b26f7c9eSZhong Yang }
13797b7b8c3Szhongyang 
13897b7b8c3Szhongyang 
13997b7b8c3Szhongyang void COptionsDlg::OnSize(UINT nType, int cx, int cy)
14097b7b8c3Szhongyang {
141d5347edbSZhong Yang     CBaseDialog::OnSize(nType, cx, cy);
14297b7b8c3Szhongyang     if (nType != SIZE_MINIMIZED)
14397b7b8c3Szhongyang     {
144877f5f92SZhongYang         //为每个子窗口设置滚动信息
14597b7b8c3Szhongyang         for (size_t i = 0; i < m_tab_vect.size(); i++)
14697b7b8c3Szhongyang         {
14797b7b8c3Szhongyang             m_tab_vect[i]->ResetScroll();
14897b7b8c3Szhongyang             m_tab_vect[i]->SetScrollbarInfo(m_tab.m_tab_rect.Height(), m_tab_height[i]);
14997b7b8c3Szhongyang         }
15097b7b8c3Szhongyang 
15197b7b8c3Szhongyang     }
15297b7b8c3Szhongyang 
153877f5f92SZhongYang     // TODO: 在此处添加消息处理程序代码
15497b7b8c3Szhongyang }
155