HasFocus против IsActive - PullRequest
1 голос
/ 27 июня 2019

Как рамка может быть «активной», но не иметь «фокуса»? Согласно документации Windows, AFAICT, окно получает фокус, когда оно становится активным, так почему же существуют две переменные и как одна может быть Истиной, а другая - Истиной?

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

Фокус может (и чаще всего делает) принадлежать дочернему элементу активного окна верхнего уровня.Или, если хотите, активное окно является родителем верхнего уровня сфокусированного окна.

1 голос
/ 27 июня 2019

Любой производный от wxTopLevelWindow (wxFrame, wxDialog и их производные) имеет метод IsActive(). Документы WX говорят:

Возвращает истину, если это окно в данный момент активно, т.е. если пользователь в данный момент работаю с ним.

" работа с ним " означает, что пользователь изменяет размеры / перемещает его, или щелкает мышью на панели инструментов, или вводит элемент управления.

HasFocus() заставляет сфокусированное окно принимать ввод с клавиатуры (даже если это не текстовый элемент управления).

Обратите внимание на небольшую разницу между «работой с ним» и «принять ввод с клавиатуры».

И еще один запрос: IsEnabled(), для ввода пользователя, который не совпадает с "действием пользователя".

...