プロジェクト→リソースの追加→Bitmap
絵を描いて保存
→リソースビューの「IDB_BITMAP1」をクリック
→右下のプロパティのFILENAMEとIDを変える
(猫の絵を描いていたらFILENAME=res\cat.bmp,ID=IDB_CATのように)
→クラスビューから「CChildView::OnPaint()」を選択
プログラムの手順
1.MFCが用意するCBitmapクラスのLoadBitmap(IDB_CAT)でリソースからビットマップ・オブジェクトというものに読み込む.
CBitmap CATBitmap;
CATBitmap.LoadBitmap(IDB_CAT);
いったんメモリーの仮想画面上にビットマップを割り当ててから,それを画面にコピーするという手順で画像を表示する(*1)ため,
2.まず仮想画面(メモリーデバイスコンテキスト)を作る
CDC MemDC;
MemDC.CreateCompatibleDC(&dc);
3.メモリーデバイスコンテキストにビットマップを割り当てる.
MemDC.Sel;ectObject(&CatBitmap);
4.メモリーデバイスコンテキストをディスプレイにコピーする.
dc.BitBlt(40,40,48,48,%MemDC,0,0,SRCCOPY);
(0,0)を左上隅とするMemDC上の48×48ピクセルのビットマップをdc上の(40,40)の位置にコピーしている.
5.但し,他の描画と同様に処理後は元の状態に戻さなければならないため,3の関数の戻り値として,以前の状態をポインタで受け取る.
1をCBitmap CATBitmap,*pOldBitmap;
3をpOldBitmap = MemDC.Sel;ectObject(&CatBitmap);
とする.
6.元に戻す
MemDC.SelectObject(pOldBitmap);
(*1Windowsはビットマップを直接画面に表示する機能がないため)
void CChildView::OnPaint()
{
CPaintDC dc(this); // 描画のデバイス コンテキスト
// TODO : ここにメッセージ ハンドラ コードを追加します。
//月(BItmap)を表示
CDC MemDC;
CBitmap CATBitmap, *pOldBitmap;
CATBitmap.LoadBitmap(IDB_CAT);
MemDC.CreateCompatibleDC(&dc);
pOldBitmap = MemDC.SelectObject(&CATBitmap);
dc.BitBlt(40, 40, 48, 48, &MemDC, 0, 0,
SRCCOPY);//SRCCOPYそのまま,SRCPAINT論理和,SRCAND論理積
MemDC.SelectObject(pOldBitmap);
}
最終更新:2007年11月20日 16:33