Я работаю над проектом, который имеет несколько окон.
Я хочу закрыть активное окно, когда я нажимаю 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);
}
У меня была похожая проблема с приложением, подобным вашему, с несколькими окнами. Я обнаружил, что GetForegroundWindow всегда будет возвращать родительское окно верхнего уровня для приложения вместо фактически сфокусированного окна. Кроме того, согласно MSDN, GetFocus и GetActiveWindow возвращают NULL, если только у вызывающего потока нет очереди сообщений для окна (т. Е. Ему принадлежит окно). Возможно, поэтому ни одна из ваших проверок не работает.
Ты пытался GetGUIThreadInfo? Член hwndFocus содержит окно с фокусом клавиатуры. Эта функция не имеет никаких ограничений относительно вызова потоков или владения окнами.
Других решений пока нет …