アークピットのホームページに戻る

WinAPIトピックのトップページに戻る

APIトピックの各章に移動する

ダウンロードのページに移動する
ダウンロードができ
ない場合の対処法
 

ページ移動

2-2-13. クライアントエリアのサイズについて

 クライアントエリアのサイズはいろいろな方法で設定できます。システムが自動的に設定することも、APIの操作によって決定することもあります。これらは、目的により使い分けてください。

システムが自動的に設定

 CreateWindow 関数には4つの位置とサイズに関するパラメータがあります。システムはウィンドウを作成する時にこれらのパラメータを使ってウィンドウのサイズを決定します。その時にクライアントエリアのサイズも決まります。ウィンドウがタイトルやメニューや枠を持つ時は、クライアントエリアは、これらの内側に設定されます。WM_CHILD スタイルの多くは、CreateWindow 関数で設定した範囲がそのままクライアントエリアになります。

操作や関数で故意にサイズを変更する

 ウィンドウをリサイズした時には、ウィンドウはサイズが変ります。それに伴い、対象のウィンドウのクライアントは範囲が変ります。ただし操作でサイズを変更できるのは、いわゆるオーバラップウィンドウと呼ばれる、アプリケーションのトップのウィンドウだけです。MDI子ウィンドウやダイアログボックス等も可能です。
 しかし子ウィンドウと呼ばれる、WM_CHILD スタイルで作成したウィンドウは、自動的に範囲が変りません。ユーザがそれらのウィンドウを、MoveWindow すれば範囲が変ります。Windowsは、ウィンドウのサイズが変ると、その変ったウィンドウに、WM_SIZEのイベントが発生しますので、必要があれば、その子ウィンドウを、MoveWindow 関数をコールして範囲を変更します。

WM_NCCALCSIZE メッセージ

 Windowsは、MoveWindow 関数がコールされると、クライアントエリアの計算をします。その時に、WM_NCCALCSIZEイベントがその対象のウィンドウプロシージャに発生します。ユーザはこれを処理することで、任意の大きさに設定することができます。

ページ移動