テクニカルレシピ(Visual C++のレシピ)

Home>>Visual C++>>動的レイアウト LastUpdate:2009-01-21

コントロール変数+MoveWindow

画面の大きさが変化するアプリの場合、
動的にレイアウトを変更しないと下図のようにあまり見た目の良くないアプリになってしまいます。

コントロールの大きさを動的に変えるのはあまり難しくありません。
以下の2点に気をつけてください。
@コントロールの変数は「Control」タイプにする
Aコントロールの配置は「MoveWindow」で行う
(ソースファイルはサンプルコードのtips1.zipにまとめてあります。)

コントロールの説明で述べましたが、コントロール変数には「Control」タイプと「Value」タイプがあります。
ControlタイプはイベントハンドラからGUIの調整が可能です。
MoveWindowはこのControlタイプ変数のサイズ、位置調整を行うメンバ関数になります。

ダメアプリを知るに示したアプリの場合、Picture Controlの大きさを変える必要があります。
幸いこのコントロールにはControlタイプのm_pictというメンバ変数が設定されているので、
m_pict.MoveWindowとすればOKです。

具体的なコードの記述場所と引数を下に示します。

OnPaint関数のelse以下(@以下)に記述があるのがわかるでしょうか。
ダイアログ全体の大きさをGetClientRectで取得して(A)、
その大きさを引数にm_pictの大きさを調整しています(B)。

実際はサイズ変更時にOnPaintを呼ぶためのイベントハンドラが必要になるので、
OnSizeという関数にInvalidate(再描画でOnPaintを呼び出す。)を追加しています。
(この辺は作りながら憶えれば十分です。)

これで無事に最大化した際に全画面表示されるはずです。

ダメアプリを知る:前項<< ページの先頭に戻る >>次項:再描画処理