ウィンドウの最小サイズ (幅と高さ) を強制する方法はありますか?
ウィンドウのサイズをある点より下に変更することを許可しないアプリケーションを見てきましたが、ちらつきなどは発生しません。また、解像度がこれらの最小値を下回った場合、最大化は許可されず、代わりに画面いっぱいに復元されますが、最大化されることはありませんでした。
これはどのように達成できますか?
私はこれを自分で行ったことはありませんが、次のようなことがうまくいくはずです:
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_SIZING:
{
RECT r = *((RECT *)lParam);
if (r.right - r.left > MAX_WIDTH)
((RECT *)lParam)->right = r.left + MAX_WIDTH;
if (r.bottom - r.top > MAX_HEIGHT)
((RECT *)lParam)->bottom = r.top + MAX_HEIGHT;
break;
}
}
return DefWindowProc (hwnd, msg, wParam, lParam);
}
基本的に、ウィンドウの長方形が最大の幅または高さを超える場合、それを調整して送信するため、ちらつきは発生しません。繰り返しますが、私はこれを試したことがないので、完全にはわかりません。
Luke が指摘するようWM_GETMINMAXINFO
に、最初からやり直すのではなく、デフォルト設定を処理することで、多くの作業を節約できます。
GetWindowRectを使用してウィンドウのサイズを確認できます。必要なサイズよりも大きいか小さい場合は、SetWindowLongを使用してDS_FIXEDSYSを追加するだけで、ウィンドウのサイズ変更をブロックできます。