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