クリックスルーできない透明な背景を持つWindowsフォーム
-
07-07-2019 - |
質問
c#/ windowsフォームを使用します。クリックの受信能力を失うことなく、フォームの背景を透明にしようとしています。
-
this.Opacityは、フォーム全体を透明にします(背景だけでなく
-
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;
}
}
所属していません StackOverflow