1 // OptionsDlg.cpp : 实现文件 2 // 3 4 #include "stdafx.h" 5 #include "MusicPlayer2.h" 6 #include "OptionsDlg.h" 7 8 9 // COptionsDlg 对话框 10 11 IMPLEMENT_DYNAMIC(COptionsDlg, CBaseDialog) 12 13 COptionsDlg::COptionsDlg(CWnd* pParent /*=NULL*/) 14 : CBaseDialog(IDD_OPTIONS_DIALOG, pParent) 15 { 16 17 } 18 19 COptionsDlg::~COptionsDlg() 20 { 21 } 22 23 CString COptionsDlg::GetDialogName() const 24 { 25 return _T("OptionsDlg"); 26 } 27 28 bool COptionsDlg::InitializeControls() 29 { 30 wstring temp; 31 temp = theApp.m_str_table.LoadText(L"TITLE_OPT"); 32 SetWindowTextW(temp.c_str()); 33 temp = theApp.m_str_table.LoadText(L"TXT_APPLY"); 34 SetDlgItemTextW(IDC_APPLY_BUTTON, temp.c_str()); 35 36 RepositionTextBasedControls({ 37 { CtrlTextInfo::R1, IDOK, CtrlTextInfo::W32 }, 38 { CtrlTextInfo::R2, IDCANCEL, CtrlTextInfo::W32 }, 39 { CtrlTextInfo::R3, IDC_APPLY_BUTTON, CtrlTextInfo::W32 } 40 }); 41 return true; 42 } 43 44 void COptionsDlg::DoDataExchange(CDataExchange* pDX) 45 { 46 CBaseDialog::DoDataExchange(pDX); 47 DDX_Control(pDX, IDC_OPTIONS_TAB, m_tab); 48 } 49 50 51 BEGIN_MESSAGE_MAP(COptionsDlg, CBaseDialog) 52 ON_BN_CLICKED(IDC_APPLY_BUTTON, &COptionsDlg::OnBnClickedApplyButton) 53 ON_WM_DESTROY() 54 ON_WM_GETMINMAXINFO() 55 ON_WM_SIZE() 56 END_MESSAGE_MAP() 57 58 59 // COptionsDlg 消息处理程序 60 61 62 BOOL COptionsDlg::OnInitDialog() 63 { 64 CBaseDialog::OnInitDialog(); 65 66 // TODO: 在此添加额外的初始化 67 68 SetIcon(IconMgr::IconType::IT_Setting, FALSE); 69 70 //创建子对话框 71 m_tab1_dlg.Create(IDD_LYRIC_SETTING_DIALOG); 72 m_tab2_dlg.Create(IDD_APPEREANCE_SETTING_DLG); 73 m_tab3_dlg.Create(IDD_DATA_SETTINGS_DIALOG); 74 m_tab4_dlg.Create(IDD_PLAY_SETTING_DIALOG); 75 m_media_lib_dlg.Create(IDD_MEDIA_LIB_SETTING_DIALOG); 76 m_tab5_dlg.Create(IDD_HOT_KEY_SETTINGS_DIALOG); 77 78 //保存子对话框 79 m_tab_vect.push_back(&m_tab1_dlg); 80 m_tab_vect.push_back(&m_tab2_dlg); 81 m_tab_vect.push_back(&m_tab3_dlg); 82 m_tab_vect.push_back(&m_tab4_dlg); 83 m_tab_vect.push_back(&m_media_lib_dlg); 84 m_tab_vect.push_back(&m_tab5_dlg); 85 86 //获取子对话框的初始高度 87 for (const auto* pDlg : m_tab_vect) 88 { 89 CRect rect; 90 pDlg->GetWindowRect(rect); 91 m_tab_height.push_back(rect.Height()); 92 } 93 94 //添加对话框 95 m_tab.AddWindow(&m_tab1_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_LRC").c_str(), IconMgr::IconType::IT_Lyric); 96 m_tab.AddWindow(&m_tab2_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_APC").c_str(), IconMgr::IconType::IT_Skin); 97 m_tab.AddWindow(&m_tab3_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_DATA").c_str(), IconMgr::IconType::IT_Setting); 98 m_tab.AddWindow(&m_tab4_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_PLAY").c_str(), IconMgr::IconType::IT_Play); 99 m_tab.AddWindow(&m_media_lib_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_MEDIA_LIB").c_str(), IconMgr::IconType::IT_Media_Lib); 100 m_tab.AddWindow(&m_tab5_dlg, theApp.m_str_table.LoadText(L"TITLE_OPT_HOT_KEY").c_str(), IconMgr::IconType::IT_Key_Board); 101 102 m_tab.SetItemSize(CSize(theApp.DPI(60), theApp.DPI(24))); 103 m_tab.AdjustTabWindowSize(); 104 105 //为每个子窗口设置滚动信息 106 for (size_t i = 0; i < m_tab_vect.size(); i++) 107 { 108 m_tab_vect[i]->SetScrollbarInfo(m_tab.m_tab_rect.Height(), m_tab_height[i]); 109 } 110 111 if (m_tab_selected < 0 || m_tab_selected >= m_tab.GetItemCount()) 112 m_tab_selected = 0; 113 m_tab.SetCurTab(m_tab_selected); 114 115 return TRUE; // return TRUE unless you set the focus to a control 116 // 异常: OCX 属性页应返回 FALSE 117 } 118 119 void COptionsDlg::OnOK() 120 { 121 // TODO: 在此添加专用代码和/或调用基类 122 for (const auto& tab : m_tab_vect) 123 { 124 tab->GetDataFromUi(); 125 } 126 127 CBaseDialog::OnOK(); 128 } 129 130 131 void COptionsDlg::OnBnClickedApplyButton() 132 { 133 // TODO: 在此添加控件通知处理程序代码 134 for (const auto& tab : m_tab_vect) 135 { 136 tab->GetDataFromUi(); 137 } 138 139 ::SendMessage(theApp.m_pMainWnd->GetSafeHwnd(), WM_SETTINGS_APPLIED, (WPARAM)this, 0); 140 141 for (const auto& tab : m_tab_vect) 142 { 143 tab->ApplyDataToUi(); 144 } 145 } 146 147 148 void COptionsDlg::OnDestroy() 149 { 150 CBaseDialog::OnDestroy(); 151 152 // TODO: 在此处添加消息处理程序代码 153 m_tab_selected = m_tab.GetCurSel(); 154 } 155 156 157 void COptionsDlg::OnSize(UINT nType, int cx, int cy) 158 { 159 CBaseDialog::OnSize(nType, cx, cy); 160 if (nType != SIZE_MINIMIZED) 161 { 162 //为每个子窗口更新滚动信息 163 for (size_t i = 0; i < m_tab_vect.size(); i++) 164 { 165 m_tab_vect[i]->SetScrollbarInfo(m_tab.m_tab_rect.Height(), m_tab_height[i]); 166 } 167 } 168 } 169