CImage类的复制问题
CImage类包含了自己的设备环境句柄。其不能被选入另一个新的CDC中。CImage为该图像创建它自己的HDC。因为一个HBITMAP一次只能被选入一个HDC,因此,与CImage相关的HBITMAP不能被选入另一个HDC。如果你需要一个CDC,则从CImage返回该HDC并把它传给CDC::FromHandle。
因此,CImage复制需要自己编写函数。如下:
void CChildView::ImageCopy(CImage* pImgSrc, CImage* pImgDrt)
{
int MaxColors = imgOriginal.GetMaxColorTableEntries();
RGBQUAD* ColorTab;
ColorTab = new RGBQUAD[MaxColors];
CDC *pDCsrc,*pDCdrc;
if (!pImgDrt->IsNull())
{
pImgDrt->Destroy();
}
pImgDrt->Create(pImgSrc->GetWidth(),pImgSrc->GetHeight(),pImgSrc->GetBPP(),0);
if (pImgSrc->IsIndexed())
{
pImgSrc->GetColorTable(0,MaxColors,ColorTab);
pImgDrt->SetColorTable(0,MaxColors,ColorTab);
}
pDCsrc=CDC::FromHandle(pImgSrc->GetDC());
pDCdrc=CDC::FromHandle(pImgDrt->GetDC());
pDCdrc->BitBlt(0,0,pImgSrc->GetWidth(),pImgSrc->GetHeight(),pDCsrc,0,0,SRCCOPY);
pImgSrc->ReleaseDC();
pImgDrt->ReleaseDC();
delete ColorTab;
}
这样OnDraw()的时候就不会出错了。