我正在开发一个有多个窗口的项目。 我想按Enter键时关闭活动窗口。
问题是所有窗户都关闭了。我想检查窗口是聚焦/活动还是前景,以便我可以改变焦点,使其不会关闭所有窗口。
当我运行代码时,我总是得到“我不会关闭”。过了一会儿他们都关门了。
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);
}
答案 0 :(得分:0)
我和像你这样有多个窗口的应用程序有类似的问题。我发现GetForegroundWindow将始终返回应用程序的顶级父窗口,而不是实际关注的窗口。此外,根据MSDN,除非调用线程具有窗口的消息队列(即它拥有窗口),否则GetFocus和GetActiveWindow返回NULL。所以,这可能就是为什么你的检查都不起作用的原因。
你试过GetGUIThreadInfo吗? hwndFocus成员保持具有键盘焦点的窗口。此函数对调用线程或窗口所有权没有任何限制。