- UID
- 11305
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-10-13
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2006-1-17 12:59:05
|
显示全部楼层
我也是这样的做的,代码和帮助中的没有出入,请看:
void OnPaint()
{
... ...
HBITMAP hBitmap = NULL;
HPALETTE hPalette = NULL;
acdbGetPreviewBitmapFromDwg(item.szFilename, &hBitmap, &hPalette);
if(hBitmap!=NULL && hPalette!=NULL)
{
CPalette* oldPal = pDC->SelectPalette(CPalette::FromHandle(hPalette), TRUE);
pDC->RealizePalette();
CBitmap bitmap;
bitmap.Attach(hBitmap);
BITMAP bm;
bitmap.GetObject(sizeof(bm), (LPVOID)&bm);
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap *pOldBitmap = dcMem.SelectObject(&bitmap);
CRect rectTemp = rectImage;
double dx = (double)rectTemp.Width()/(double)(bm.bmWidth)+0.0000001;
double dy = (double)rectTemp.Height()/(double)bm.bmHeight+0.0000001;
double ds = 1.0;
if(dx-dy < 0.0000001)
{
ds = dx;
rectTemp.top = rectTemp.top + (rectTemp.Height()-(int)(bm.bmHeight*ds))/2;
}
else
{
ds = dy;
rectTemp.left = rectTemp.left + (rectTemp.Width()-(int)(bm.bmWidth*ds))/2;
}
pDC->StretchBlt(rectTemp.left, rectTemp.top, (int)(bm.bmWidth*ds),(int)(bm.bmHeight*ds), &dcMem, 0, 0,bm.bmWidth, bm.bmHeight,SRCCOPY);
dcMem.SelectObject(pOldBitmap);
pDC->SelectPalette(oldPal,TRUE );
pDC->RealizePalette();
bitmap.DeleteObject();
DeleteObject(hBitmap);
DeleteObject(hPalette);
}
... ...
}
问题是从函数acdbGetPreviewBitmapFromDwg返回的hBitmap, hPalette仅仅通过DeleteObject函数销毁的是什么?还有就是我怀疑acdbGetPreviewBitmapFromDwg函数内部在读取DWG文件的缩略图时有内存没有释放! |
|