首页 > 解决方案 > 为什么当 HBITMAP 被销毁时,来自 OleCreatePictureIndirect 的 IImage 变得无效?

问题描述

我想用来OleCreatePictureIndirect创建一个IImage对象。我用一个HBITMAPto 作为来源。只要现有HBITMAP的没有被破坏,这就是完美的。

为什么仍然依赖于我用来创建IImagefrom 的旧 HBITMAP?文档对此只字未提。

阅读有关的文档fOwn,我了解,调用者仍负责销毁对象。但是没有注意,只要我想使用IImage.

当我使用时,OleLoadPicture我不需要关心任何事情。

// If this object gets out of scope the IImage ist no longer valid.
CBitmap bitmap;
bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_ANYBITMAP));
CComPtr<IPicture> spIPicture;
PICTDESC pictdesc{ sizeof(PICTDESC) };
pictdesc.picType = PICTYPE_BITMAP;
pictdesc.bmp.hbitmap = bitmap;                      
HRESULT hr = ::OleCreatePictureIndirect(&pictdesc, IID_IPicture, FALSE, (void**)&spIPicture);
UNUSED_ALWAYS(hr);
ASSERT(SUCCEEDED(hr));

标签: c++imagebitmapcom

解决方案


推荐阅读