如何防止 CWnd 获得焦点?

Posted

技术标签:

【中文标题】如何防止 CWnd 获得焦点?【英文标题】:How can i prevent a CWnd from getting the focus? 【发布时间】:2010-06-17 18:33:51 【问题描述】:

我编写了一个 MFC 应用程序,并且需要一个不会将输入焦点从另一个窗口移开的按钮。

不幸的是,当用户用鼠标单击按钮时,删除 WS_TABSTOP 样式并没有帮助。当我阻止 WM_LBUTTONDOWN 时,我没有得到视觉按下指示,所以这也不起作用。

【问题讨论】:

【参考方案1】:

如果您想保留某个特定窗口的焦点,您可以使用按钮的OnLButtonDown 处理程序中的CWnd::SetFocus() 命令将焦点强制返回到您的窗口。

如果您希望将焦点恢复到多个窗口之一,您可以尝试将 CButton 子类化并捕获当键盘焦点更改为按钮时发送的 CWnd::OnSetFocus() 消息。

OnSetFocus() 事件包含刚刚失去焦点的控件的 CWnd,因此您可以手动将其放回原处,或者作为 OnSetFocus() 事件本身的一部分,或者稍后再次作为 OnLButtonDown() 处理程序的一部分.

【讨论】:

以上是关于如何防止 CWnd 获得焦点?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 QTabWidget 滚动按钮获得焦点?

如何防止滚动到焦点 EditText [重复]

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

有没有办法防止 ScrollView 在 TextView 获得焦点时自动滚动?

JavaScript / DOM:如果焦点丢失到另一个窗口(应用程序),如何防止模糊事件

防止焦点 div 使用箭头键滚动