Как статический элемент управления Windows предотвращает фокус ввода - PullRequest
3 голосов
/ 31 августа 2010

Мы знаем, что Static Control в Windows не получает фокус ввода. Но так как Static Control в Windows - это просто дочернее окно, согласно тому, что я понимаю до сих пор, любое окно должно иметь фокус ввода, когда мы щелкаем по нему. Так как же Статический контроль достигает такого эффекта, как отклонение фокуса ввода? Я подозреваю, что он имеет специальную обработку в своем обработчике WM_SETFOCUS, который возвращает фокус ввода его родительскому окну. Однако я провел несколько тестов, и кажется, что дочернее окно действительно вообще не получает WM_SETFOCUS, т. Е. Windows вообще никогда не пыталась сфокусировать ввод на статическом контроле.

Я прочитал msdn о фокусе ввода, и нет ничего, связанного с тем, как Windows выделяет фокус для статического контроля. Может кто-нибудь объяснить, как Статический контроль сделан, чтобы не иметь фокус ввода?

1 Ответ

5 голосов
/ 31 августа 2010

Статический элемент управления возвращает HTTRANSPARENT из своего обработчика WM_NCHITTEST. Это заставляет щелчок перейти непосредственно в основное окно (которое является родительским). WM_MOUSEACTIVATE и WM_*BUTTONCLICK и другая магия в конечном итоге приводят к активации и SetFocus.

...