■ DeleteObject()やDeleteDC()の呼び出しが必要な場合

[Visual C++ Q & A 掲示板] [過去ログの一覧]


うーん 2007/11/29(木) 10:40:16 <初心者>
 お世話になります.あるサイトを参考にメモリDCの勉強をしているのですが,DeleteObject()やDeleteDC()の呼び出しがどういう場合に必要なのか
わかりません。MSDNを見てもどういう場合に呼び出しが必要か明確に書いて
ないようです。

質問したいことは、下記のコードに関する以下の点です。

(1) 参考にしたサイトによると、@でビットマップオブジェクトをnewして
AのpBMP->DeleteObject()でビットマップオブジェクトを解放すると
あったのですが、解放はBのdelete pBMPで行なうべきではないで
しょうか?

(2) CBitmapオブジェクトのデストラクタの中にはDeleteObject()が記述され
ているのでしょうか?記述されているのならDeleteObject()の呼び出しは必要
ないように思うのですが。それとも、CreateCompatibleBitmap()を呼び出した
場合には必ずDeleteobject()を呼び出すことになっているのでしょうか?

(3) CのDeleteDC()もデストラクタ中に記述されているなら呼び出す必要
がないと思いますが。 

環境はVC++2005、MFCです。よろしくお願い致します。


void CmdcView::OnDraw(CDC* pDC)
{
       ...
      CDC mDC;
      mDC.CreateCompatibleDC(pDC);

      CBitmap *pBMP, *pOldBMP;
      pBMP=new CBitmap;         // @  
      pBMP->CreateCompatibleBitmap(pDC, 256, 128);  
      pOldBMP=mDC.SelectObject(pBMP);

      mDC.FillSolidRect(0,0,256,128,RGB(255,0,0));
      pDC->BitBlt(100,100,256,128,&mDC,0,0,SRCCOPY);
      
      mDC.SelectObject(pOldBMP);
      pBMP->DeleteObject();       //  A
      delete pBMP;                       //  B

      mDC.DeleteDC()                    //  C
}

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library