无法为 CListCtrl 设置覆盖图像
Unable to Set Overlay Image for CListCtrl
我正在尝试在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 通道位图创建遮罩似乎毫无意义。
相关文章:
- 使用ios:ate写入到流会覆盖现有文件
- 我可以重新分配/覆盖std::字符串吗
- 叮叮当当在修复时插入多个"覆盖"说明符
- 谷歌模拟和覆盖关键字
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 使用子类覆盖基类中定义的函数
- 当覆盖存在时调用基本虚拟"binded to object"函数
- C++指针在 for 循环中被覆盖
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 为什么我的全局 new() 覆盖被绕过了?
- 被覆盖的函数不会反映在基类中,这是正常行为吗?
- C++找出覆盖同一行的数组
- 专门化模板覆盖函数/避免对象切片
- 重写打印函数而不是覆盖基类
- C++中"覆盖功能的异常规范比基本版本更宽松"的奇怪错误
- 如何在 c++ 中覆盖相同的文本文件
- 覆盖应用程序的低级别键盘挂钩问题
- C++生成器透明位图覆盖画布
- dll注入:使用opengl绘制简单的游戏覆盖图