Techracho

WPFで枠を消す

このエントリーをはてなブックマーク Share
2009.12.09    C#, Windows, 馬場   タグ: —    baba   

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

COPYRIGHT [C] 2009 BEYOND PERSPECTIVE SOLUTIONS LTD. ALL RIGHTS RESERVED.