C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■87101 / )  Re[1]: フォームを常に全面にし、操作だけは背面の画面に反映
□投稿者/ 魔界の仮面弁士 (1638回)-(2018/04/11(Wed) 21:45:15)
No87094 (対中率 さん) に返信
> フォームを最前面にしつつ、キーボードやマウス操作のみ背面に反映する方法はないでしょうか。

枠線部もマウス操作を受け付けない方が良いでしょうか?


private void button1_Click(object sender, EventArgs e)
{
 var fw = new FrameWindow();
 fw.SetBounds(50, 100, 350, 250);
 fw.Show(this);
}


private class FrameWindow : Form
{
 protected override CreateParams CreateParams
 {
  get
  {
   const int WS_EX_NOACTIVATE = 0x8000000; // アクティブにならないフォームにする
   const int WS_EX_TRANSPARENT = 0x20; // マウス操作を透過(要レイヤードウィンドウ)
   var cp = base.CreateParams;
   cp.ExStyle |= WS_EX_TRANSPARENT | WS_EX_NOACTIVATE;
   return cp;
  }
 }
 public FrameWindow()
 {
  ShowInTaskbar = false;
  TopMost = true;
  BackColor = Color.Blue; // 枠線色
  Padding = new Padding(9); // 枠線幅
  FormBorderStyle = FormBorderStyle.None;
  Controls.Add(new Control() { BackColor = Color.Magenta, Dock = DockStyle.Fill });

  // WS_EX_TRANSPARENT を有効にするには、
  // TransparencyKey をセットするか、もしくは
  // Opacity を 1.0 未満にする必要がある
  TransparencyKey = Color.Magenta;
 }
}
返信 編集キー/


管理者用

- Child Tree -