无法为 CListCtrl 设置覆盖图像

Unable to Set Overlay Image for CListCtrl

本文关键字:覆盖 覆盖图 图像 设置 CListCtrl      更新时间:2023-10-16

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

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

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

我一生都找不到如何在网络上任何地方执行此操作的合理文档。谁能看到我错过了什么?

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

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

为了使它更加复杂,我使用 ILC_COLOR32 来表示具有 alpha(透明度(通道的 32 位彩色位图。所以我没有蒙版,蒙版似乎与 alpha 通道不兼容。

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

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