我正在处理一个有多个窗口的项目。我想在按下回车键时关闭活动窗口。
问题是所有的窗户都关了。我想检查窗口是聚焦/活动的还是在前景上,这样我就可以更改焦点,使其不会关闭所有窗口。
当我运行代码时,我总是得到"我不关闭"。过了一段时间,它们都关闭了。
if(GetFocus() == currentWindow->getHandler() || GetForegroundWindow() == currentWindow->getHandler() || GetActiveWindow() == currentWindow->getHandler() )
{
std::cout << "Is the same";
if(windows.front() != currentWindow)
{
SetForegroundWindow(SetFocus(windows.front()->getHandler()));
DeleteWindow(currentWindow)
}
else
{
SetForegroundWindow(SetFocus(windows.back()->getHandler()));
DeleteWindow(currentWindow);
}
}
else
{
std::cout << "I dont close!";
DeleteWindow(currentWindow);
}
Sleep(500);
}
我的应用程序有一个类似的问题,它有多个窗口。我发现GetForegroundWindow将始终返回应用程序的顶级父窗口,而不是实际聚焦的窗口。此外,根据MSDN的说法,GetFocus和GetActiveWindow返回NULL,除非调用线程有该窗口的消息队列(即它拥有该窗口)。所以,这可能就是为什么你的检查都不起作用的原因。
您尝试过GetGUIThreadInfo吗?hwndFocus成员保持具有键盘焦点的窗口。此函数对调用线程或窗口所有权没有任何限制。