多次调用如下函数(大约在600次以上)
void CStencilBar::ImageListAdd(CImageList *plist,CString csImageAddress)
{
HBITMAP hBitmap; CBitmap *pBitmap; pBitmap=new CBitmap;
else{
hBitmap=(HBITMAP)LoadImage(NULL,csImageAddress,IMAGE_BITMAP,32,32,LR_LOADFROMFILE);//csImageAddress是位图文件完整路径字符串
}
pBitmap->Attach (hBitmap); RGBTRIPLE* rgb = (RGBTRIPLE*)(pBitmap); COLORREF rgbMask = RGB(rgb[0].rgbtRed, rgb[0].rgbtGreen, rgb[0].rgbtBlue); int iret = plist.Add (pBitmap,rgbMask); delete(pBitmap);
}会出现plist中加入位图失败的现象,具体检查发现:位图路径没有错误,得到的句柄也不是null的
pBitmap也不是Null的,就是无法加入到CimageList中。我曾经尝试过观察plist.Add后返回的索引,发现add前和add后的imagelist中位图数量没有增加。并且每次出现问题的位图都不同难道是loadimage API的问题????
void CStencilBar::ImageListAdd(CImageList *plist,CString csImageAddress)
{
HBITMAP hBitmap; CBitmap *pBitmap; pBitmap=new CBitmap;
else{
hBitmap=(HBITMAP)LoadImage(NULL,csImageAddress,IMAGE_BITMAP,32,32,LR_LOADFROMFILE);//csImageAddress是位图文件完整路径字符串
}
pBitmap->Attach (hBitmap); RGBTRIPLE* rgb = (RGBTRIPLE*)(pBitmap); COLORREF rgbMask = RGB(rgb[0].rgbtRed, rgb[0].rgbtGreen, rgb[0].rgbtBlue); int iret = plist.Add (pBitmap,rgbMask); delete(pBitmap);
}会出现plist中加入位图失败的现象,具体检查发现:位图路径没有错误,得到的句柄也不是null的
pBitmap也不是Null的,就是无法加入到CimageList中。我曾经尝试过观察plist.Add后返回的索引,发现add前和add后的imagelist中位图数量没有增加。并且每次出现问题的位图都不同难道是loadimage API的问题????
解决方案 »
- treeview显示图标不正确
- mfc odbc访问access数据库
- 有什么虚拟机有支持多显示卡的?Virtual PC 和 vmWare都没有啊.
- 怎样把静态库包装成动态库?
- 现在公司要做一个网络管理软件,请问如何判断用户的上网时间呢
- 求随机数发生器的算法
- 请问哪里有Visual C++全部错误消息的中文解释说明
- 请问在VC中对指向数组缓冲区可以这样定义吗?void *和const char *,说能给我解释一下它们的用法,谢谢!!!
- 看在我已经熬了两个晚上的份上,各位帮帮忙,我的眼睛已经熬红了--一个向MDI程序插入MENU的问题
- 一个简单问题,但是我不知道
- MFC初学者提问!
- 求助:list或tree相关的问题,如题
之前调用了pBitmap->Detach();
你的方法无法编译通过yjgx007(who's superior)
我相信之前我已经create了,否则一个image也加不进去
主要是这里不需要new CBitmap对象指针。
我做了1000次调用测试,正常。void CTestDlgDlg::ImageListAdd(CImageList *plist,CString csImageAddress)
{
HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL, csImageAddress,IMAGE_BITMAP,32,32,LR_LOADFROMFILE);//csImageAddress是位图文件完整路径字符串
CBitmap bmp;
bmp.Attach(hBitmap);
int iret = plist->Add(&bmp, RGB(203, 228, 252));
bmp.Detach();
}
bmp.Detach();
DeleteObject(hBitmap);在Detach后面DeleteObject,这样GDI总数就不会涨了。
我试过你的方法,还是存在我说的问题。可能问题不是出在这段代码里面
我再仔细的检查一下数据。其实我不太明白new和不new有什么区别?
Add时ImageList对象会自己分配内存。
所以位图对象可以是局部的。
唉!依然找不到问题再那里啊~。再发一遍通过loadimage从硬盘上得到一个位图的句柄hBitmap然后
CBitmap pBitmap;
pBitmap.Attach (hBitmap);
imagelist.Add(&pBitmap,RGB(0,0,0));
pBitmap.Detach();发现add之前和add之后imagelist.GetimageCount的数值没有变化!可以保证句柄不是空的,add返回的索引也不是空的。困扰很长时间了,郁闷~~
改为:
plist.Add(CBitmap::FromHandle(hBitma), rgbMask);