デスクトップ上のウィンドウのサイズを変更する場合、Windows は WM_GETMINMAXINFO メッセージに依存してサイズ制限を取得するため、Microsoft のガイドラインに従って、ウィンドウが引き続き使用可能になります。
[サイズ変更可能なウィンドウ] コンテンツが使用できなくなるサイズがある場合は、ウィンドウの最小サイズを設定する必要があります。サイズ変更可能なコントロールの場合、サイズ変更可能な要素の最小サイズを、リスト ビューの最小機能列幅などの最小機能サイズに設定します。
デフォルトでは、Windows はキャプション バーの高さを高さ、幅を約 100 ピクセル (最小/最大/閉じるボタン + 名前の数文字) に制限しています。この制約を取り除くには、WM_GETMAXINFO メッセージを自分で処理し、最小サイズを必要に応じて変更する必要があります。
C# コードの例は、ここから適応できます。
private const long WM_GETMINMAXINFO = 0x24;
public struct POINTAPI
{
public int x;
public int y;
}
public struct MINMAXINFO
{
public POINTAPI ptReserved;
public POINTAPI ptMaxSize;
public POINTAPI ptMaxPosition;
public POINTAPI ptMinTrackSize;
public POINTAPI ptMaxTrackSize;
}
protected override void WndProc(ref System.Windows.Forms.Message m )
{
if (m.Msg == WM_GETMINMAXINFO)
{
MINMAXINFO mmi = (MINMAXINFO)m.GetLParam(typeof(MINMAXINFO));
mmi.ptMinTrackSize.x = 0;
mmi.ptMinTrackSize.y = 0;
System.Runtime.InteropServices.Marshal.StructureToPtr(mmi, m.LParam, true);
}
base.WndProc(ref m);
}
そして(これを調査している間)同じ問題を扱う別のSOの質問を見つけました。WM_WINDOWPOSCHANGING
これを Vista や C# で動作させるには、どうやらオーバーライドする必要があるようです。(私が見た別の例は Delphi にあり、後者のメッセージもオーバーライドする必要はありませんでした)。