Как перехватить события мыши прозрачного окна? - PullRequest
5 голосов
/ 18 мая 2011

У меня есть прозрачное окно (созданное с помощью WS_EX_LAYERED), и я хотел бы получать события мыши из областей с нулевой альфа.
Насколько я знаю, я мог бы:

1) Использовать мышиный крючок
2) Покрасить фон почти полностью прозрачным цветом (с непрозрачностью 1)

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

Есть ли другой способ получения этих событий мыши?

1 Ответ

1 голос
/ 20 мая 2011

По данным MSDN:

Проверка попадания многослойного окна основанный на форме и прозрачности окно. Это означает, что районы окна с цветными клавишами или чье альфа-значение равно нулю, сообщения мыши через. Однако если многослойное окно имеет WS_EX_TRANSPARENT расширенное окно стиль, форма многослойного окна будут игнорироваться и события мыши будут переданы в другие окна под слоистым окном.

Однако в новом потоке вы можете непрерывно получать координаты мыши с помощью GetCursorPos, и если позиция находится внутри одного из ваших значков (независимо от того, что он находится над нулевым альфа-пикселем внутри значка), вы справляетесь с этим. Не намного лучше, чем крюк

...