Многослойные окна, UpdateLayeredWindow, альфа-смешивание и события мыши

В Windows Forms и C# я использую форму со стилем WS_EX_LAYERED и вызываю UpdateLayeredWindow, чтобы установить фон для изображения с прозрачным / альфа-смешиванием:

NativeMethods.BLENDFUNCTION blend = new NativeMethods.BLENDFUNCTION();
blend.BlendOp = NativeMethods.AC_SRC_OVER;
blend.BlendFlags = 0;
blend.SourceConstantAlpha = 255;
blend.AlphaFormat = NativeMethods.AC_SRC_ALPHA;

NativeMethods.UpdateLayeredWindow(form.Handle, screenDc, ref topPos, ref size, 
    memDc, ref pointSource, 0, ref blend, NativeMethods.ULW_ALPHA);

В областях формы, где изображение прозрачно, форма не получает события мыши. Они идут к окну, которое находится под формой.

Есть ли стиль окна или опция, которую можно установить, чтобы позволить форме получать события мыши (движение мыши, нажатие мыши и т. Д.) По всей ее поверхности?

1 ответ

Из многослойных окон

Тестирование Хита

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

Я хотел бы попробовать этот стиль WS_EX_TRANSPARENT

Другие вопросы по тегам