Многослойные окна, 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