无法为CListCtrl设置叠加图像

时间:2015-07-01 06:38:10

标签: c++ winapi mfc overlay imagelist

我试图在“CListCtrl”中显示带有叠加层的图像。在MFC对话框中。列表控件处于报告/详细信息模式。

我无法找到有关在某些项目图片上显示叠加层的好文档。

失败的代码如下所示。我有一个64x32位图,在前32x32像素中有一个文件夹图标,在第二个32x32像素(IDB_FOLDERS32_OVERLAY)中有一个叠加图像。位图具有似乎正常工作的透明度。

CBitmap bm;
bm.LoadBitmap(IDB_FOLDERS32_OVERLAY);
m_ImageList.Create(32, 32, ILC_COLOR32, 2, 1);
int index = m_ImageList.Add(&bm, RGB(0, 0, 0));
ASSERT(index >= 0);
m_ImageList.SetOverlayImage(index, 2);

最后一行返回0,表示错误。 GetLastError()返回6(ERROR_INVALID_HANDLE)。

我无法为我的生活找到合理的文档,以便在网络上的任何地方做到这一点。谁能看到我失踪的东西?

1 个答案:

答案 0 :(得分:0)

Jonathan Potter是正确的,我需要包含ILC_MASK标志,以便SetOverlayImage()返回一个表示成功的值。

但是,在我可以在网上找到的所有文档中,没有提供完整的描述如何执行此操作。例如,我没有找到一个显示我的位图应该是什么样的源。

为了使其更复杂,我使用ILC_COLOR32来表示具有alpha(透明度)通道的32位彩色位图。所以我没有掩码,并且掩码似乎与alpha通道不兼容。

所以最后,我刚刚创建了一个包含两个图像的位图:第一个是文件夹,第二个是叠加图像的文件夹。问题解决了。

此时,尝试弄清楚是否可以使用32位alpha通道位图创建掩码似乎毫无意义。