如何从MFC中禁用的非父窗口将焦点设置为模态窗口?

时间:2015-01-14 16:01:07

标签: c++ mfc

我有一个带有多个窗口的应用程序。当一个窗口打开模式对话框时,父窗口将自动被DoModal禁用。我还通过调用EnableWindow(FALSE)禁用其他窗口。但是,如果父窗口被另一个应用程序遮挡,并且用户点击其他窗口之一,我想将焦点放在模态对话框上。这可能吗?如果是这样,我该怎么做?我试图给用户一个应用程序没有挂起的视觉线索。提前谢谢。

2 个答案:

答案 0 :(得分:0)

好吧,当您禁用窗口时,会阻止用户与其进行交互。因此,如果禁用除模式对话框之外的所有窗口,则无法单击它们。我想也许你唯一的机会就是为鼠标安装一个HookProc并尝试以这种方式拦截点击。我不知道它是否有效,但这是一个想法。

答案 1 :(得分:0)

看起来我找到了问题的解决方案。在我的主窗口中实现OnMouseActivate,PreTranslateMessage和OnActivate可以解决问题,就像这样......

int CCVMDIChild::OnMouseActivate(CWnd* desktopWindow, UINT hitTest, UINT message)
{
    if (m_IsDisabled)
    {
        CWnd* inDialogWindow = GetAppData()->GetInDialogWindow(); // Pointer to the parent of the modal dialog
        if (inDialogWindow != nullptr)
        {
            inDialogWindow->GetLastActivePopup()->SetFocus();
            inDialogWindow->GetLastActivePopup()->FlashWindowEx(FLASHW_CAPTION, 5, 50);
        }
        return MA_NOACTIVATE;
    }
    return CDocFrame::OnMouseActivate(desktopWindow, hitTest, message);
}