1

Windows フォームと 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);

画像が透明なフォームの領域では、フォームはマウス イベントを受け取りません。フォームの下にあるウィンドウに移動します。

フォームがその表面全体でマウス イベント (マウスの移動、マウス ダウンなど) を受信できるように設定できるウィンドウ スタイルまたはオプションはありますか?

4

1 に答える 1

1

レイヤード ウィンドウから

ヒット テスト

レイヤード ウィンドウのヒット テストは、ウィンドウの形状と透明度に基づいています。これは、カラー キーが設定されているか、アルファ値が 0 であるウィンドウの領域は、マウス メッセージを通過させることを意味します。レイヤード ウィンドウに WS_EX_TRANSPARENT 拡張ウィンドウ スタイルがある場合、レイヤード ウィンドウの形状は無視され、レイヤード ウィンドウの下にある他のウィンドウにマウス イベントが渡されます。

その WS_EX_TRANSPARENT スタイルを削除してみます

于 2012-12-14T18:52:31.860 に答える