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