[.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の知識は役立つものです。

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

baba

ゆとりプログラマー。 高校時代から趣味でプログラミングを初め、そのままコードを書き続けて現在に至る。慶應義塾大学環境情報学部(SFC)卒業。BPS設立初期に在学中から参加している最古参メンバーの一人。Ruby on Rails、PHP、Androidアプリ、Windows/Macアプリ、超縦書の開発などを気まぐれにやる。軽度の資格マニアで、情報処理技術者試験(15区分 + 情報処理安全確保支援士試験)、技術士(情報工学部門)、CITP、Ruby Programmer Goldなどを保有。

babaの書いた記事

BPSアドベントカレンダー

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ