今回小ハマリしたのは、
『WPFでWindowsサイズを変更しない設定しても、1度だけサイズ変更できてしまう』
です。
通常、WindowのResizeMode=”NoResize”とすると、最小化や最大化のボタンは表示されず、Windowサイズも変更できなくなる。
当然タイトルバーのダブルクリックでもサイズ変更不可となる。。。はず。
しかし、なぜかタイトルバーをダブルクリックすると一度だけサイズ変更できてしまう。
こんな感じ↓
この事象を対策する。
この事象の対策は、プロパティの見直しではできなかった。
結果から言うと、対策方法はWndProcでメッセージを制御する方法となる。
WPFの場合は、Windowsフォームと違ってWndProcをオーバーライドするだけでは使えない。
WndProcを自作し、初期化時にフックする必要がある。
using System;
using System.Windows;
using System.Windows.Interop;
namespace WpfApplication1
{
public partial class CannotChangeWindowSize : Window
{
public CannotChangeWindowSize()
{
InitializeComponent();
SourceInitialized += new EventHandler(CannotChangeWindowSize_SourceInitialized);
}
//WndProcをフックする
private void CannotChangeWindowSize_SourceInitialized(object sender, EventArgs e)
{
HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
source.AddHook(new HwndSourceHook(WndProc));
}
//非クライアント領域のダブルクリック
const int WM_NCLBUTTONDBLCLK = 0xA3;
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
//タイトルバーダブルクリックは捨てる
if (msg == WM_NCLBUTTONDBLCLK)
{
handled = true;
}
return IntPtr.Zero;
}
}
}
これで実行すると、無事にサイズ変更不可となった。
めでたしめでたし。