繁体   English   中英

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

[英]How can I set focus to a modal window from a disabled non-parent window in MFC?

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

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

看来我找到了问题的解决方案。 在我的主窗口中实现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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM