プロパティシートサイズ変更時のコントロール配置

 ビューのサイズを変更したときに、 その中に貼り付けられているコントロールの位置を画面上でバランスよく配置されるようにするには、 ビューのOnSize関数(WM_SIZEメッセージハンドラ) の中でCWnd::MoveWindow関数を使いコントロールの位置を再計算すればよい。 これに対し、プロパティシートのサイズを変更したときはちょっとした工夫が必要となる。
 ここではフォームビューにプロパティシートを貼り付け、 フォームビューのサイズを変更したときにプロパティシートのサイズもそれに合わせて変更されるようにする。 さらにプロパティシートのサイズ変更にともない、 シート内のコントロールの位置も再計算されるという画面を作る方法を説明する。 なおフォームビューにプロパティシートを貼り付ける方法については、 「フォームビューにプロパティシートを貼る」を参照のこと。
1.フォームビューにプロパティシートを貼り付ける
方法については「フォームビューにプロパティシートを貼る」を参照のこと。

2.CPropertySheetの派生クラス作成
CPropertySheetの派生クラスCSheetを作成し、 これをもとの CPropertySheetと置き換える。
(m_SheetをCPropertySheet型からCSheet型に変更する)

3.CSheet::OnSize関数のオーバーライド
CSheet::OnSize関数をオーバーライドし、以下のようにする。
void CSheet::OnSize(UINT nType, int cx, int cy)
{
	CPropertySheet::OnSize(nType, cx, cy);

	// TODO: この位置にメッセージ ハンドラ用のコードを追加してください

	CTabCtrl* pTab = GetTabControl();
	if( pTab != NULL ) {
		pTab->MoveWindow(0, 0, cx, cy);

		// 本来プロパティページのサイズをタブコントロールに合わせる
		// 処理をするのだが、以下のようにすると自動的に調整される
		CPropertyPage *pActive = GetActivePage();
		if( pActive != NULL )
			SetActivePage(pActive);
	}
} 
4.プロパティシートの位置、サイズを変更
フォームビューのOnSize関数でプロパティシートの位置、サイズを変更する。
(プロパティシートのGetSafeHWND関数を実行して、その結果がNULLでないときだけサイズ変更する)

5.各コントロールの位置、サイズを変更
プロパティページのOnSize関数で各コントロールの位置、サイズを変更する。
(4と同様GetSafeHWND関数による判定処理をおこなうこと)

目次へ