在对话框之间自动移动焦点

Posted

技术标签:

【中文标题】在对话框之间自动移动焦点【英文标题】:Automatically Move Focus Between Dialogs 【发布时间】:2020-09-17 22:32:13 【问题描述】:

我有一个模式对话框,在按下按钮时会显示一个无模式的“伴随对话框”。为了使 UI 更加直观和流畅,我希望焦点跟随鼠标并在对话框之间移动,而无需额外点击。

是否有一个简单的消息处理程序可以提供帮助?我想我可以通过在每个对话框中使用 TrackMouseEventOnMouseHover 来做到这一点 - 但对于这种“简单”的效果来说,这似乎很重要?

【问题讨论】:

【参考方案1】:

好吧...所以我完全想多了!只需使用OnMouseMoveOnNcMouseMove

//------------------------------------------------------------------------------
void DlgA::OnMouseMove(UINT nFlags, CPoint point)
//------------------------------------------------------------------------------

    HWND hwnd = ::GetActiveWindow();
    if (pDlgB != NULL)
    
        if (hwnd == pDlgB->GetSafeHwnd())
        
            // Make the focus switch automatically
            SetFocus();
        
    

【讨论】:

How to set focus in a dialog box. 尽管如此,即使操作正确,如果您决定切换到不同的线程,例如,这将启动任务栏闪光暴风雪。另一个应用程序的窗口。 @IInspectable - 我不明白为什么会这样?如果一个(或另一个)已经拥有焦点,它只会将焦点从一个切换到另一个。如果焦点在其他地方,它不会做任何事情。

以上是关于在对话框之间自动移动焦点的主要内容,如果未能解决你的问题,请参考以下文章

焦点不会改变嵌套 CWnd 派生类中的制表键

[WPF自定义控件库] 让Form在加载后自动获得焦点

MFC 对话框 位图按钮 失去焦点

以编程方式移除焦点?

jQuery UI 对话框 + ASP.NET 文本框 + 焦点

VS2010下,RichEdit 2.0获得焦点后 ,自动全选并且自动滚到到最后一行,请问怎么解决?