xref: /MusicPlayer2/MusicPlayer2/CHotKeySettingDlg.cpp (revision 0fc1c23250c9d2ac73d9c13c8e94c7a863ad989d)
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