如果显示模态弹出 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。这是解决这个问题的正确方法吗?