Tech Racho エンジニアの「?」を「!」に。
  • インフラ
  • 開発

[.NET] WPFでウィンドウ枠を消す方法

最近はWPFに触れる機会が増えてきたので、小ネタを少しずつ書いていきます。

今日は、ウィンドウ枠を消す方法です。デザインを格好良くするために、ウィンドウ枠を消したいことも多々ありますよね。

Window.xaml で、

  • WindowStyle を None にする
  • AllowTransparency を true にする

以上で枠が消えます。

・・・これだけだとつまらないので、枠が消えても移動・リサイズが正しくできるようにしてみます。
なお、システムメニューを表示する方法は先日の記事をご覧下さい。

方法

まず、右下の方に適当なリサイズハンドルを用意します。ButtonやImage`などで良いでしょう。

そして、MouseLeftButtonDown イベントに以下のイベントハンドラを追加します。

[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

private void Hoge_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    //WM_NCLBUTTONDOWN=0xA1, HTBOTTOMRIGHT=17
    IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(this).Handle;
    PostMessage(hwnd, 0xA1, (IntPtr)17, IntPtr.Zero);
}

これで、そのハンドルをドラッグするとリサイズできるようになります。

また、17(HTBOTTOMRIGHT)のところを 2(HTCAPTION)に変えると、ウィンドウを移動できるようになります。

WPFになっても、WinAPIの知識は役立つものです。


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。