#c #mfc
#c #mfc
Вопрос:
Я пытаюсь создать Cimagelist
для вставки ListCtrl
Список:
CImageList *cImageList;
cImageList = new CImageList();
cImageList->Create(120, 120, ILC_COLOR32, 0, 0);
если загрузка из LoadBitmap
everthing работает нормально
CBitmap bitmap;
bitmap.LoadBitmap(IDB_ACCEPTABLE2);
cImageList->Replace(i, amp;bitmap, NULL);
bitmap.DeleteObject();
Если я попытаюсь использовать CBitmap::FromHandle
, мое изображение будет на 100% черным
CBitmap *bmp = CBitmap::FromHandle(OneFunction());
cImageList->Replace(i, bmp, NULL);
Есть ли какой-нибудь способ загрузить растровое изображение при Cimagelist
использовании CBitmap::FromHandle
?
Ответ №1:
Как задокументировано, CBitmap::FromHandle создает временный объект, который вам не принадлежит:
Если объект CBitmap еще не присоединен к дескриптору, создается и присоединяется временный объект CBitmap. Этот временный объект CBitmap действителен только до следующего простоя приложения в цикле событий, после чего все временные графические объекты удаляются. Другой способ сказать это заключается в том, что временный объект действителен только во время обработки одного сообщения window .
Объект принадлежит MFC, и мусор собирается в следующем цикле обработки в режиме ожидания. Если вы хотите прикрепить CBitmap
объект к a HBITMAP
, вам нужно вручную вызвать Attach
:
CBitmap bmp;
bmp.Attach( OneFunction() );
или, если вам нужно вручную управлять временем жизни объекта:
CBitmap* bmp{ new CBitmap() };
bmp->Attach( OneFunction() );
Комментарии:
1. Спасибо, у меня все еще есть проблема из-за указателей, но ваше решение показывает несколько способов решения проблемы.