『ながっちゃん』のページ

気まぐれ兄ちゃんの独り言

#4[CPP]ダイアログの背景色を変える

内容

ダイアログボックスの背景色を任意の色に変更する方法です。

解説

 ダイアログボックスのf背景色を変更するには、メッセージハンドラOnEraseBkgnd( )で色を設定します。
 サンプルは、Visual StudioでWin32アプリケーションを作成した時に自動的に生成されるバージョン情報表示のダイアログボックス(クラス CAboutDlg)の背景色を白にしています。まず、背景にしたい色でブラシを作成し、次の背景色で塗りつぶす領域をGetClipBox( )で取得し、その領域をPatBlt( )を使い設定した色のブラシで塗りつぶします。GetClipBox( )で塗りつぶし対象の領域を取得しているのは、このダイアログが他のウインドウの下になった後、一番上に表示された時に必ずしも全部の領域を塗り直す必要はなく、他のウィンドウの下になっていた領域だけ塗り直せばいいからです。GetClipBox( )は他のウィンドウの下になっていた塗り直し対象の領域(クリッピング領域)に外接する最小の四角形を取得します。

サンプル

BOOL CAboutDlg::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
	// ブラシを使いたい背景色に設定する。
	CBrush backBrush( RGB(255, 255, 255) );	// 白

	// 古いブラシを保存する。
	CBrush* pOldBrush = pDC->SelectObject(&backBrush);

	// 再描画対象領域の背景の塗りつぶし
	CRect rect;
	pDC->GetClipBox(&rect); 
	pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);

	pDC->SelectObject(pOldBrush);
	return TRUE;
}