プロジェクト→リソースの追加→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