質問

c#/ windowsフォームを使用します。クリックの受信能力を失うことなく、フォームの背景を透明にしようとしています。

  1. this.Opacityは、フォーム全体を透明にします(背景だけでなく

  2. BackColor = Color.Red;
       TransparencyKey = BackColor;

フォームの背景を透明にし、クリックスルー可能にします。フォームを透明にしたいのですが、クリックを受信できるはずです

方法?

役に立ちましたか?

解決

WM_NCHITTESTを処理する必要があります。以下のスニペットでは、m.lParamには画面の左上隅を基準としたマウス位置のパックされたXおよびY座標が含まれていることに注意してください。位置が透明領域と一致するかどうかを確認する必要があります。

この例では、HTCAPTIONを返します。つまり、この領域はウィンドウのキャプションのように動作します。つまり、ユーザーはこの場所をクリックしてドラッグすると、ウィンドウをドラッグできます。 こちらで返される他の値をご覧ください。そしてその意味

protected override void WndProc(ref Message m) {
    switch (m.Msg) {
    case 0x84: // this is WM_NCHITTEST
        base.WndProc(ref m);
        if ((/*m.LParam.ToInt32() >> 16 and m.LParam.ToInt32() & 0xffff fit in your transparen region*/) 
          && m.Result.ToInt32() == 1) {
            m.Result = new IntPtr(2);   // HTCAPTION
        }
        break;
    default:
        base.WndProc(ref m);
        break;
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top