确定窗口是否聚焦/活动/前景

时间:2013-12-16 10:59:02

标签: c++ window focus

我正在开发一个有多个窗口的项目。 我想按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);
}

1 个答案:

答案 0 :(得分:0)

我和像你这样有多个窗口的应用程序有类似的问题。我发现GetForegroundWindow将始终返回应用程序的顶级父窗口,而不是实际关注的窗口。此外,根据MSDN,除非调用线程具有窗口的消息队列(即它拥有窗口),否则GetFocus和GetActiveWindow返回NULL。所以,这可能就是为什么你的检查都不起作用的原因。

你试过GetGUIThreadInfo吗? hwndFocus成员保持具有键盘焦点的窗口。此函数对调用线程或窗口所有权没有任何限制。