c++ - 我想在EN_KILLFOCUS之后找出焦点属于哪里?

标签 c++ windows visual-studio winapi mfc

现在我已经像这样构建了我的应用程序:它在 Internet 浏览器(IE、FireFox、Chrome 等)的容器中运行。我的程序中有一个无模式对话框,该对话框包含一个 CEdit 控件。

这是我的问题:当用户激活编辑控件以输入内容时,编辑控件获得焦点。当编辑控件失去焦点时,我必须检查输入是否有效。如果没有,我将显示一个模型对话框

AfxMessageBox

.但是现在我无法确定我的编辑控件是否在我自己的应用程序中丢失了。因为编辑控件可能会通过很多方式失去焦点,例如,当用户关闭浏览器时,当用户打开文本程序时。在这些情况下,我将跳过无效检查。

任何人都可以告诉我如何找到我的编辑控件失去焦点的方式。

最佳答案

调用 GetFocus() 并查看焦点是否返回到线程中的另一个窗口。

HWND hwndFocus = ::GetFocus();
if (hwndFocus != 0 && ::GetWindowThreadProcessId(hwndFocus, NULL) == ::GetCurrentThreadId())
{
    // focus still in our thread
}

关于c++ - 我想在EN_KILLFOCUS之后找出焦点属于哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11980735/

相关文章:

c++ - 获取可变参数模板可变参数模板参数可变参数

c++ - "please check gdb is codesigned - see taskgated(8)"- 如何使用签名的 Homebrew 代码安装 gdb?

java - 如果 ShellExecuteEx 的调用者死亡,则停止 JVM windows 进程

node.js - 在Windows上运行 Electron

c# - 如何找到一个值分配给哪个变量?

visual-studio - 运行时 fatal error - 可能是 CLR 错误

javascript - 我需要忽略 GIT 中的 .cache 文件夹吗

c++ - 从编辑控件中获取文本(纯 Win32 API)

windows - 如何禁用 Shift/Ctrl/Alt 键的 WM_KEYDOWN 重复事件?

c++ - 我如何反复期待一系列调用?