无法为 CListCtrl 设置叠加图像

Unable to Set Overlay Image for CListCtrl

我正在尝试在 MFC 对话框中的 'CListCtrl' 中显示带有叠加层的图像。列表控件处于 report/details 模式。

我找不到在我的某些项目图像上显示叠加层的好文档。

失败的代码如下所示。我有一个 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);

最后一行returns0,表示出错。 GetLastError() returns 6 (ERROR_INVALID_HANDLE).

我一辈子都找不到关于如何在网络上任何地方执行此操作的合理文档。谁能看到我遗漏了什么?

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

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

为了让它更复杂,我使用 ILC_COLOR32 来表示带有 alpha(透明)通道的 32 位颜色位图。所以我没有蒙版,而且蒙版似乎与 alpha 通道不兼容。

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

在这一点上,尝试弄清楚是否或如何使用 32 位 alpha 通道位图创建蒙版似乎毫无意义。