1 // CHotKeySettingDlg.cpp: 实现文件
2 //
3
4 #include "stdafx.h"
5 #include "MusicPlayer2.h"
6 #include "CHotKeySettingDlg.h"
7 #include "WinVersionHelper.h"
8
9
10 // CHotKeySettingDlg 对话框
11
IMPLEMENT_DYNAMIC(CHotKeySettingDlg,CTabDlg)12 IMPLEMENT_DYNAMIC(CHotKeySettingDlg, CTabDlg)
13
14 CHotKeySettingDlg::CHotKeySettingDlg(CWnd* pParent /*=nullptr*/)
15 : CTabDlg(IDD_HOT_KEY_SETTINGS_DIALOG, pParent)
16 {
17
18 }
19
~CHotKeySettingDlg()20 CHotKeySettingDlg::~CHotKeySettingDlg()
21 {
22 }
23
ShowKeyList()24 void CHotKeySettingDlg::ShowKeyList()
25 {
26 int index = 0;
27 for (int i = HK_PLAY_PAUSE; i < HK_MAX; i++)
28 {
29 m_key_list.SetItemText(index, 1, m_hotkey_group[static_cast<eHotKeyId>(i)].GetHotkeyName().c_str());
30 index++;
31 }
32 }
33
EnableControl()34 void CHotKeySettingDlg::EnableControl()
35 {
36 m_key_list.EnableWindow(m_data.hot_key_enable);
37 if (!m_data.hot_key_enable)
38 {
39 m_hot_key_ctrl.EnableWindow(FALSE);
40 GetDlgItem(IDC_SET_BUTTON)->EnableWindow(FALSE);
41 }
42 else
43 {
44 m_hot_key_ctrl.EnableWindow(m_item_selected >= 0);
45 GetDlgItem(IDC_SET_BUTTON)->EnableWindow(m_item_selected >= 0);
46 }
47 }
48
ListClicked()49 void CHotKeySettingDlg::ListClicked()
50 {
51 EnableControl();
52 //CHotKey hot_key = m_hotkey_group[static_cast<eHotKeyId>(m_item_selected + HK_PLAY_PAUSE)];
53 //m_hot_key_ctrl.SetHotKey(hot_key.key, hot_key.Modifiers());
54 }
55
InitializeControls()56 bool CHotKeySettingDlg::InitializeControls()
57 {
58 wstring temp;
59 temp = theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_HOOK_SHORTCUT_KEY_ENABLE");
60 SetDlgItemTextW(IDC_HOT_KEY_ENABLE_CHECK, temp.c_str());
61 temp = theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_HOOK_MULTI_MEDIA_KEY_ENABLE");
62 SetDlgItemTextW(IDC_ENABLE_GLOBAL_MULTIMEDIA_KEY_CHECK, temp.c_str());
63 // IDC_HOT_KEY_LIST
64 temp = theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_SHORTCUT_KEY_SEL");
65 SetDlgItemTextW(IDC_TXT_OPT_HOT_KEY_SHORTCUT_KEY_SEL_STATIC, temp.c_str());
66 // IDC_HOTKEY1
67 temp = theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_SHORTCUT_KEY_SET");
68 SetDlgItemTextW(IDC_SET_BUTTON, temp.c_str());
69
70 return false;
71 }
72
DoDataExchange(CDataExchange * pDX)73 void CHotKeySettingDlg::DoDataExchange(CDataExchange* pDX)
74 {
75 CTabDlg::DoDataExchange(pDX);
76 DDX_Control(pDX, IDC_HOT_KEY_LIST, m_key_list);
77 DDX_Control(pDX, IDC_HOT_KEY_ENABLE_CHECK, m_hot_key_enable_check);
78 DDX_Control(pDX, IDC_HOTKEY1, m_hot_key_ctrl);
79 DDX_Control(pDX, IDC_ENABLE_GLOBAL_MULTIMEDIA_KEY_CHECK, m_enable_global_multimedia_key_check);
80 }
81
82
BEGIN_MESSAGE_MAP(CHotKeySettingDlg,CTabDlg)83 BEGIN_MESSAGE_MAP(CHotKeySettingDlg, CTabDlg)
84 ON_BN_CLICKED(IDC_SET_BUTTON, &CHotKeySettingDlg::OnBnClickedSetButton)
85 ON_NOTIFY(NM_CLICK, IDC_HOT_KEY_LIST, &CHotKeySettingDlg::OnNMClickHotKeyList)
86 ON_NOTIFY(NM_RCLICK, IDC_HOT_KEY_LIST, &CHotKeySettingDlg::OnNMRClickHotKeyList)
87 ON_BN_CLICKED(IDC_HOT_KEY_ENABLE_CHECK, &CHotKeySettingDlg::OnBnClickedHotKeyEnableCheck)
88 ON_WM_DESTROY()
89 ON_BN_CLICKED(IDC_ENABLE_GLOBAL_MULTIMEDIA_KEY_CHECK, &CHotKeySettingDlg::OnBnClickedEnableGlobalMultimediaKeyCheck)
90 END_MESSAGE_MAP()
91
92
93 // CHotKeySettingDlg 消息处理程序
94
95
96 BOOL CHotKeySettingDlg::OnInitDialog()
97 {
98 CTabDlg::OnInitDialog();
99
100 // TODO: 在此添加额外的初始化
101
102 m_hot_key_enable_check.SetCheck(m_data.hot_key_enable);
103 m_enable_global_multimedia_key_check.SetCheck(m_data.global_multimedia_key_enable);
104 if (CWinVersionHelper::IsWindows81OrLater())
105 m_enable_global_multimedia_key_check.ShowWindow(SW_HIDE); //Win8.1以上系统此选项不起作用,将其隐藏
106
107 m_toolTip.Create(this);
108 m_toolTip.SetMaxTipWidth(theApp.DPI(300));
109 m_toolTip.AddTool(GetDlgItem(IDC_ENABLE_GLOBAL_MULTIMEDIA_KEY_CHECK), theApp.m_str_table.LoadText(L"TIP_OPT_HOT_KEY_HOOK_MULTI_MEDIA_KEY").c_str());
110
111 m_toolTip.SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
112
113 CRect rect;
114 m_key_list.GetWindowRect(rect);
115 int width0 = theApp.DPI(180);
116 int width1 = rect.Width() - width0 - theApp.DPI(20) - 1; // 这里预留一个滚动条宽度但空白为两个,因为此子对话框高度不足tab滚动条没有显示,如果在OnSize重新设置就会正常了
117 m_key_list.SetExtendedStyle(m_key_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_LABELTIP);
118 m_key_list.InsertColumn(0, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_FUNCTION").c_str(), LVCFMT_LEFT, width0);
119 m_key_list.InsertColumn(1, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_SHORTCUT_KEY").c_str(), LVCFMT_LEFT, width1);
120
121 m_key_list.InsertItem(0, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_PLAY_PAUSE").c_str());
122 m_key_list.InsertItem(1, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_STOP").c_str());
123 m_key_list.InsertItem(2, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_FAST_FORWARD").c_str());
124 m_key_list.InsertItem(3, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_REWIND").c_str());
125 m_key_list.InsertItem(4, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_PREVIOUS").c_str());
126 m_key_list.InsertItem(5, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_NEXT").c_str());
127 m_key_list.InsertItem(6, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_VOLUME_UP").c_str());
128 m_key_list.InsertItem(7, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_VOLUME_DOWN").c_str());
129 m_key_list.InsertItem(8, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_EXIT").c_str());
130 m_key_list.InsertItem(9, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_PLAYER_SHOW_HIDE").c_str());
131 m_key_list.InsertItem(10, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_DESKTOP_LYRIC_SHOW_HIDE").c_str());
132 m_key_list.InsertItem(11, theApp.m_str_table.LoadText(L"TXT_OPT_HOT_KEY_ADD_TO_MY_FAVOURITE").c_str());
133
134 ShowKeyList();
135
136 EnableControl();
137
138 return TRUE; // return TRUE unless you set the focus to a control
139 // 异常: OCX 属性页应返回 FALSE
140 }
141
142
OnBnClickedSetButton()143 void CHotKeySettingDlg::OnBnClickedSetButton()
144 {
145 // TODO: 在此添加控件通知处理程序代码
146 eHotKeyId key_id = static_cast<eHotKeyId>(m_item_selected + HK_PLAY_PAUSE);
147
148 WORD key_coke, modifiers;
149 m_hot_key_ctrl.GetHotKey(key_coke, modifiers);
150
151 if (modifiers == 0 && key_coke != 0)
152 {
153 const wstring& info = theApp.m_str_table.LoadText(L"MSG_OPT_HOT_KEY_GLOBLE_HOT_KEY_WARNING");
154 MessageBox(info.c_str(), NULL, MB_ICONWARNING | MB_OK);
155 return;
156 }
157
158 CHotKey hot_key;
159 hot_key.key = key_coke;
160
161 hot_key.ctrl = ((modifiers & HOTKEYF_CONTROL) != 0);
162 hot_key.shift = ((modifiers & HOTKEYF_SHIFT) != 0);
163 hot_key.alt = ((modifiers & HOTKEYF_ALT) != 0);
164
165 m_hotkey_group[key_id] = hot_key;
166
167 ShowKeyList();
168 }
169
170
OnNMClickHotKeyList(NMHDR * pNMHDR,LRESULT * pResult)171 void CHotKeySettingDlg::OnNMClickHotKeyList(NMHDR* pNMHDR, LRESULT* pResult)
172 {
173 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
174 // TODO: 在此添加控件通知处理程序代码
175 m_item_selected = pNMItemActivate->iItem;
176 ListClicked();
177 *pResult = 0;
178 }
179
180
OnNMRClickHotKeyList(NMHDR * pNMHDR,LRESULT * pResult)181 void CHotKeySettingDlg::OnNMRClickHotKeyList(NMHDR* pNMHDR, LRESULT* pResult)
182 {
183 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
184 // TODO: 在此添加控件通知处理程序代码
185 m_item_selected = pNMItemActivate->iItem;
186 ListClicked();
187 *pResult = 0;
188 }
189
190
OnBnClickedHotKeyEnableCheck()191 void CHotKeySettingDlg::OnBnClickedHotKeyEnableCheck()
192 {
193 // TODO: 在此添加控件通知处理程序代码
194 m_data.hot_key_enable = (m_hot_key_enable_check.GetCheck() != 0);
195 EnableControl();
196 }
197
198
199
OnBnClickedEnableGlobalMultimediaKeyCheck()200 void CHotKeySettingDlg::OnBnClickedEnableGlobalMultimediaKeyCheck()
201 {
202 // TODO: 在此添加控件通知处理程序代码
203 m_data.global_multimedia_key_enable = (m_enable_global_multimedia_key_check.GetCheck() != 0);
204 }
205
206
PreTranslateMessage(MSG * pMsg)207 BOOL CHotKeySettingDlg::PreTranslateMessage(MSG* pMsg)
208 {
209 // TODO: 在此添加专用代码和/或调用基类
210 if (pMsg->message == WM_MOUSEMOVE)
211 m_toolTip.RelayEvent(pMsg);
212
213 return CTabDlg::PreTranslateMessage(pMsg);
214 }
215