如何在 MFC 中将焦点设置为来自禁用的非父 window 的模态 window?
How can I set focus to a modal window from a disabled non-parent window in MFC?
我有一个包含多个 windows 的应用程序。当一个 window 打开模态对话框时,父 window 会自动被 DoModal 禁用。我还通过调用 EnableWindow(FALSE) 禁用了另一个 windows。但是,如果父 window 被另一个应用程序遮挡,并且用户单击另一个 windows,我想将焦点放在模式对话框上。这可能吗?如果是这样,我该怎么做?我试图给用户一个应用程序没有挂起的视觉线索。提前致谢。
嗯,当您禁用 window 时,您会阻止用户与其交互。因此,如果您禁用除模态对话框之外的所有 windows,您将无法单击它们。我想也许你唯一的机会就是为鼠标安装一个 HookProc 并尝试以这种方式拦截点击。我不知道它是否可行,但这是一个想法。
看来我找到了问题的解决方案。在我的主 window 中实现 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);
}
我有一个包含多个 windows 的应用程序。当一个 window 打开模态对话框时,父 window 会自动被 DoModal 禁用。我还通过调用 EnableWindow(FALSE) 禁用了另一个 windows。但是,如果父 window 被另一个应用程序遮挡,并且用户单击另一个 windows,我想将焦点放在模式对话框上。这可能吗?如果是这样,我该怎么做?我试图给用户一个应用程序没有挂起的视觉线索。提前致谢。
嗯,当您禁用 window 时,您会阻止用户与其交互。因此,如果您禁用除模态对话框之外的所有 windows,您将无法单击它们。我想也许你唯一的机会就是为鼠标安装一个 HookProc 并尝试以这种方式拦截点击。我不知道它是否可行,但这是一个想法。
看来我找到了问题的解决方案。在我的主 window 中实现 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);
}