是否有一些方法可以使用CBitmap::FromHandle在Cimagelist上加载位图
Is There some way to load a bitmap on the Cimagelist using CBitmap::FromHandle?
我正在尝试创建一个Cimagelist
插入到ListCtrl
列表:
CImageList *cImageList;
cImageList = new CImageList();
cImageList->Create(120, 120, ILC_COLOR32, 0, 0);
如果一个负载从LoadBitmap
一切工作良好
CBitmap bitmap;
bitmap.LoadBitmap(IDB_ACCEPTABLE2);
cImageList->Replace(i, &bitmap, NULL);
bitmap.DeleteObject();
如果我尝试使用CBitmap::FromHandle
,我的图像是100%黑色
CBitmap *bmp = CBitmap::FromHandle(OneFunction());
cImageList->Replace(i, bmp, NULL);
是否有办法在Cimagelist
上使用CBitmap::FromHandle
加载位图?
如文档所述,CBitmap::FromHandle创建一个您不拥有的临时对象:
如果CBitmap对象尚未附加到句柄,则创建并附加一个临时CBitmap对象。这个临时CBitmap对象只在下一次应用程序在其事件循环中有空闲时间之前有效,此时所有临时图形对象都将被删除。另一种说法是,临时对象只在处理一个窗口消息期间有效。
对象为MFC所有,垃圾将在下一个空闲处理循环中收集。如果要将CBitmap
对象附加到HBITMAP
,则需要手动调用Attach
:
CBitmap bmp;
bmp.Attach( OneFunction() );
或者,如果您需要手动控制对象生命周期:
CBitmap* bmp{ new CBitmap() };
bmp->Attach( OneFunction() );