お世話になります.あるサイトを参考にメモリDCの勉強をしているのですが,DeleteObject()やDeleteDC()の呼び出しがどういう場合に必要なのか
わかりません。MSDNを見てもどういう場合に呼び出しが必要か明確に書いて
ないようです。
質問したいことは、下記のコードに関する以下の点です。
(1) 参考にしたサイトによると、①でビットマップオブジェクトをnewして
②のpBMP->DeleteObject()でビットマップオブジェクトを解放すると
あったのですが、解放は③のdelete pBMPで行なうべきではないで
しょうか?
(2) CBitmapオブジェクトのデストラクタの中にはDeleteObject()が記述され
ているのでしょうか?記述されているのならDeleteObject()の呼び出しは必要
ないように思うのですが。それとも、CreateCompatibleBitmap()を呼び出した
場合には必ずDeleteobject()を呼び出すことになっているのでしょうか?
(3) ④の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(); // ②
delete pBMP; // ③
mDC.DeleteDC() // ④
}
ツイート | ![]() |