Лучший способ заставить клики мыши не проходить через отключенные компоненты? - PullRequest
1 голос
/ 11 октября 2011

Я использую общие элементы управления Windows, такие как «КНОПКА» и «РЕДАКТИРОВАТЬ» для моего приложения. В некоторых случаях я хочу отключить компоненты, поэтому я использую функцию EnableWindow, чтобы компоненты выглядели отключенными и не получали события.

Проблема, однако, в том, что отключенный компонент не просто блокирует события щелчка мыши - он передает их компонентам, расположенным ниже. Есть ли способ предотвратить прохождение событий щелчка мышью через отключенные компоненты? Или, альтернативно, простой способ проверить этот случай и отбросить эти события?

Я думал о создании прозрачных окон сверху, но это звучит слишком сложно для чего-то, что кажется таким тривиальным. Я также подумал о проверке совпадений координат мыши с дочерними элементами каждого контейнера перед тем, как принять событие. Есть ли лучший способ? У меня уже есть настраиваемая область в WndProc (я подклассифицировал класс кнопки), чтобы перехватывать события кнопки мыши, если это помогает.

Заранее спасибо!

1 Ответ

1 голос
/ 11 октября 2011

Из документации EnableWindow :

Когда ввод отключен, окно не получает ввод, такой как щелчки мыши и нажатия клавиш.

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

Я не уверен, почему вы пытаетесь научить своих пользователей нажимать на то, что отключено (каждое другое приложение Windows просто игнорирует эти щелчки, поэтому вы учите своих пользователей путать ваше приложение или любое другое приложение на планете), но если вы действительно хотите это поддерживать, возможно, самый простой способ - поместить кнопку внутри панели точно такого же размера, как кнопка.

...