第8回 画像の余白を塗りつぶす

ImageViewer08_01.gif
これまでに縦横比を保ったままウインドウの中央に画像を表示できるようになった。しかしウインドウのサイズを変更するとこのようになってしまう。これは以前に描画のちらつきをなくすためWM_ERASEBKGNDメッセージを無効化し、背景の描画がされないようにしたためだ。

ImageViewer08_02.gif
今回は画像以外の背景を塗りつぶすことでこの現象を抑える。

ImageViewer08_03.gif まずImageViewerView.hの先頭にatlmisc.hのインクルード宣言を追加する。このヘッダーはCRectというクラスを利用するためのものだ。
#include "atlmisc.h"

ImageViewer08_04.gif そして画像の余白部分を塗る処理をOnPaint()内に置く。背景はGetSysColorBrush()によりウインドウの背景色と同じブラシを取得してそれで塗りつぶす。塗りつぶすための命令はFillRectで、ここではCPaintDC内のメンバー関数を利用している。
		//余白描画
		HBRUSH	hBrush;
		hBrush = ::GetSysColorBrush(COLOR_WINDOW);
		if(nX == 0)
		{
			//上下の余白
			dc.FillRect(&CRect(0,0,nWindowWidth,nY),hBrush);
			dc.FillRect(&CRect(0,nY + nHeight,nWindowWidth,nWindowHeight),hBrush);
		}
		else
		{
			//左右の余白
			dc.FillRect(&CRect(0,0,nX,nWindowHeight),hBrush);
			dc.FillRect(&CRect(nX + nWidth,0,nWindowWidth,nWindowHeight),hBrush);
		}
		::DeleteObject(hBrush);

ImageViewer08_05.gif
これでウインドウサイズを変更しても余白部分が変な表示にならなくなった。

プロジェクトファイルをダウンロード


カテゴリー「画像表示ソフトを作る」 のエントリー