申请了一块缓存区读入bmp图象,可是随着调用的次数变多,就会失败
编号:QA004373
建立日期: 2001年8月26日 最后修改日期:2001年8月26日
所属类别:
w75:
操作系统:win98
编程工具:vc6.0
问题:本人用vc60,在cview中的onpain调用
if(::StretchDIBits(dc.m_hDC,0,0,1024,700,xposi,-28,1024,700,pBitsSrc,(LPBITMAPINFO)&Info,DIB_RGB_COLORS,SRCCOPY)
== GDI_ERROR)
语句来画个特别大的图(3000*700)中的一部分,其中 用hBitsSrc = ::GlobalAlloc(GHND,(long)(3517L*737L*3L));
pBitsSrc = (LPSTR)::GlobalLock(hBitsSrc);申请了一块大约7M多的缓存区用来读入从bmp文件的图象。开始的时候都还可以,可是随着调用的次数变多,就会失败,返回个GDI_ERROR的错误,屏幕变白(我在每次申请前都用globalunlock()回收过内存的)。请问专家是什么原因?
你个人的水平 中级
回答:
这个问题的出现我认为和你申请空间无关。
我虽然没有看到源码,但我有九成的把握确定你在OnPaint里有如下代码:
CClientDC dc(this);(或类似代码)
建议把你的代码作如下修改:
1. 在CChildView里
CClientDC *dc;//是指针
2. 在OnCreate里:
BOOL R;
R=CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
dc=new CClientDC (this);
return R;
3. 在Onpaint中的dc.改为dc->
4. 建议把申请空间也放在OnCreate里
5. 如果没有特别需要不要lock空间
此问题由Zhao Lei回答。
| |
|
|
| |
|
|