如果显示模态弹出 windows,则阻止热键
Preventing a hotkey if modal popup windows are displayed
几个月前,在 Whosebug 上,有人鼓励我 正确地 做事并使用 热键 。结果我听从了他们的建议。
我的编辑器中分配了几个热键,我刚刚遇到了一个问题。这是热键之一:
if (!RegisterHotKey(GetSafeHwnd(), hkEditor_WeekendMeeting, MOD_CONTROL | MOD_SHIFT, 0x57)) // W
aryStrHotKeyErrors.Add(_T("Control + Shift + W"));
热键事件处理器:
void CChristianLifeMinistryEditorDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
switch (nHotKeyId)
{
case hkEditor_WeekendMeeting:
OnFilePublicTalk();
break;
default:
CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
}
}
为清楚起见,我删除了所有其他热键。 OnFilePublicTalk
显示弹出模式对话框:
void CChristianLifeMinistryEditorDlg::OnFilePublicTalk()
{
CPublicTalkDlg dlgPublicTalk(this);
if (m_pEntry != nullptr)
{
dlgPublicTalk.SetPublicTalkInfo(m_pEntry->GetPublicTalkInfo());
dlgPublicTalk.SetCircuitVisitMode(m_iIncludeMode == kIncludeServiceTalk); // AJT v17.0.7
if (dlgPublicTalk.DoModal() == IDOK)
{
m_pEntry->SetPublicTalkInfo(dlgPublicTalk.GetPublicTalkInfo());
SetModified(true);
UpdatePreview(m_iDateIndex);
m_pHtmlPreview->Refresh2(REFRESH_COMPLETELY); // Ensure it has refreshed
}
}
}
热键工作正常。但是,如果当时我在我的编辑器中的 另一个 模式弹出窗口 window 中并且不小心按下了热键,window 就会出现。如果显示弹出窗口 windows,我没想到我的任何热键都会起作用。
我该如何纠正?
我想到了这个解决方案:
void CChristianLifeMinistryEditorDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
if (GetActiveWindow() != this)
{
CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
return;
}
switch (nHotKeyId)
{
case hkEditor_WeekendMeeting:
OnFilePublicTalk();
break;
default:
CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
}
}
我用了GetActiveWindow。这是解决这个问题的正确方法吗?
几个月前,在 Whosebug 上,有人鼓励我 正确地 做事并使用 热键 。结果我听从了他们的建议。
我的编辑器中分配了几个热键,我刚刚遇到了一个问题。这是热键之一:
if (!RegisterHotKey(GetSafeHwnd(), hkEditor_WeekendMeeting, MOD_CONTROL | MOD_SHIFT, 0x57)) // W
aryStrHotKeyErrors.Add(_T("Control + Shift + W"));
热键事件处理器:
void CChristianLifeMinistryEditorDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
switch (nHotKeyId)
{
case hkEditor_WeekendMeeting:
OnFilePublicTalk();
break;
default:
CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
}
}
为清楚起见,我删除了所有其他热键。 OnFilePublicTalk
显示弹出模式对话框:
void CChristianLifeMinistryEditorDlg::OnFilePublicTalk()
{
CPublicTalkDlg dlgPublicTalk(this);
if (m_pEntry != nullptr)
{
dlgPublicTalk.SetPublicTalkInfo(m_pEntry->GetPublicTalkInfo());
dlgPublicTalk.SetCircuitVisitMode(m_iIncludeMode == kIncludeServiceTalk); // AJT v17.0.7
if (dlgPublicTalk.DoModal() == IDOK)
{
m_pEntry->SetPublicTalkInfo(dlgPublicTalk.GetPublicTalkInfo());
SetModified(true);
UpdatePreview(m_iDateIndex);
m_pHtmlPreview->Refresh2(REFRESH_COMPLETELY); // Ensure it has refreshed
}
}
}
热键工作正常。但是,如果当时我在我的编辑器中的 另一个 模式弹出窗口 window 中并且不小心按下了热键,window 就会出现。如果显示弹出窗口 windows,我没想到我的任何热键都会起作用。
我该如何纠正?
我想到了这个解决方案:
void CChristianLifeMinistryEditorDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
{
if (GetActiveWindow() != this)
{
CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
return;
}
switch (nHotKeyId)
{
case hkEditor_WeekendMeeting:
OnFilePublicTalk();
break;
default:
CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
}
}
我用了GetActiveWindow。这是解决这个问题的正确方法吗?