TwitterをしているとTLでふと見かけたので備忘録。
Windownsフォームアプリケーションを作る際、背景を透過したくなることが稀にあります。
単純にTransparentを指定してもサポートされてない旨のメッセージとともに失敗します。
その場合、TransparencyKeyに背景色を指定すれば透過されます。
this.TransparencyKey = Color.FromKnownColor(KnownColor.Control);
このことは結構な記事で言われてることなんですが、その場合に透過部分のマウスイベントが取得できません。
その部分がすっぽり空いてるので当たり前かもしれませんが、必要な時もあります。
この場合は常にマウスカーソルを追って条件分岐でフォームの中に入った時に特定の処理を走らせることで期待の動作をさせます。
protected override void WndProc(ref Message m) { base.WndProc(ref m); int mouseX = Cursor.Position.X; int mouseY = Cursor.Position.Y; int width = this.Size.Width; int height = this.Size.Height; int formX = this.Location.X; int formY = this.Location.Y; if (mouseX >= formX && mouseX <= (formX + width) && mouseY >= formY && mouseY <= (formY + height)) { Console.WriteLine("領域内です"); } }
上のコードの参考例です。
How to get mouse over event, when form is transparent. · GitHub
もっといい方法がありましたらコメントしていただけるとありがたいです。