0

ダイアログを含む垂直方向と水平方向の両方の最小サイズを計算したいと思います。GetClientRect を使用して幅と高さを決定しました。次に、垂直スクロール バーが必要な場合の幅について、GetSystemMetrics (SM_CXVSCROLL) + GetSystemMetrics (SM_CXSIZEFRAME) を追加しましたが、数ピクセル足りないようです。

スクロール バーの有無にかかわらず、水平方向と垂直方向の両方の寸法について、どの GetSysMetrics を考慮する必要がありますか?

4

1 に答える 1

0

ウィンドウの境界やその他の非クライアント領域のスペースを考慮する必要があります。これを行う最も簡単な方法は、AdjustWindowRect()またはを使用することAdjustWindowRectEx()です。ただし、スクロール バーを自分で処理する必要があります。

ドキュメントから:

AdjustWindowRectEx 関数は、WS_VSCROLL または WS_HSCROLL スタイルを考慮しません。スクロール バーを考慮するには、SM_CXVSCROLL または SM_CYHSCROLL を指定して GetSystemMetrics 関数を呼び出します。

したがって、手順は次のとおりです。

  1. GetClientRect()最小サイズのクライアント領域を取得します。

  2. AdjustWindowRectEx()ウィンドウ スタイルに基づいて、クライアント サイズをウィンドウ サイズに変換します。

  3. 必要に応じて、スクロール バーを考慮して追加の調整を適用します (GetSystemMetrics()およびSM_CXVSCROLL/またはを使用SM_CYHSCROLL)。

于 2012-02-01T06:48:23.907 に答える