Ответ 1
GetActiveWindow вернет окно верхнего уровня, связанное с фокусом ввода. GetFocus вернет дескриптор окна с фокусом ввода.
Эта статья может помочь:
http://www.microsoft.com/msj/0397/Win32/Win320397.aspx
Использование Win32 API (в C, но это несущественное), как я могу определить, имеет ли данное окно (идентифицированное HWND) фокус? Я подключаю приложение, наблюдающее за событием, и когда это событие происходит, я хочу проверить, имеет ли приложение уже фокус. Если это не так, я хочу, чтобы вспышка окна, пока они не сосредоточиться на нем.
В качестве альтернативы, флаг FlashWindowEx struct FLASHW_TIMERNOFG, который мигает до тех пор, пока окно не будет фокусироваться, не будет мигать, если в окне уже есть фокус? Я не могу проверить это сейчас, так как я не в своей среде разработки, но у меня создалось впечатление, что он будет мигать в любом случае, чего я пытаюсь избежать.
Изменить: Также, если это имеет значение, приложение использует DirectX в этом окне.
GetActiveWindow вернет окно верхнего уровня, связанное с фокусом ввода. GetFocus вернет дескриптор окна с фокусом ввода.
Эта статья может помочь:
http://www.microsoft.com/msj/0397/Win32/Win320397.aspx
Помимо ответа gkrogers с помощью GetActiveWindow, вы также можете поддерживать логическую переменную для окна, которое вы хотите знать, если оно имеет фокус или нет, помещая WM_SETFOCUS
и WM_KILLFOCUS
события, или WM_ACTIVATE
WndProc() ..
case WM_SETFOCUS:
puts( "Got the focus" ) ;
break ;
case WM_KILLFOCUS:
puts( "Lost the focus" ) ;
break;
case WM_ACTIVATE:
if( LOWORD(wparam) == WA_ACTIVE )
puts( "MEGAZORD ACTIVATED kew kew kew (flashy-eyes)" ) ;
else
puts( "I AM NOW INACTIVE." ) ;
break ;
Вы действительно имеете в виду "фокус" или вы имеете в виду "активный?"
В одном окне есть фокус - тот, который первым в очереди получает события клавиатуры. Внешнее окно (которое пользователь может перетащить по экрану) является "активным", если одна из его подокнов имеет фокус, но может или не иметь фокуса.
Используйте функцию GetForegroundWindow, чтобы получить Hwnd, на котором вы сейчас фокусируетесь. Тогда вам просто нужно сравнить его с окном вашего приложения, чтобы проверить, содержит ли он фокус или нет.
Для нескольких немодальных детей: Внутри Ребенка вы можете сохранить фокус, 13.08.19 VS2017. Вы можете сохранить фокус, чтобы родитель знал, на какого немодального ребенка щелкнули.
В обработчике обратного вызова childs:
case WM_CHILDACTIVATE: //only gets called when the child border is click on.
//CurrentFocus = hDlg; //example : can save the focus globally for parent usage.
//Beep(2000, 250); // so you can test
break;
case WM_GETMINMAXINFO: //gets called when child window is being moved or sized.
//Beep(2000, 250);
break;
case WM_LBUTTONDOWN: //Only called when cursor is inside the child client area
//CurrentFocus = hDlg; // following the focus.
//Beep(2000, 250);
break;