c++ - 为什么显示 ListView 图标时背景变黑?

标签 c++ windows winapi mfc common-controls

我不确定为什么在向 CListCtrl(或 ListView 控件)添加图标时出现黑色轮廓?

enter image description here

我这样加载它:

//HICON hIcon;
LoadIconWithScaleDown(theApp.m_hInstance, MAKEINTRESOURCE(Icon_ID), 15, 15, &hIcon);

然后我这样创建我的图像列表:

//CImageList iml;
iml.Create(15, 15, ILC_COLOR32, numberIcons, 0);
iml.Add(hIcon);

首先准备 ListView :

//CListCtrl lst;
lst.SetExtendedStyle(LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | 
    LVS_EX_LABELTIP | LVS_EX_HEADERDRAGDROP | LVS_EX_SUBITEMIMAGES);
lst.ModifyStyle(0, LVS_SHOWSELALWAYS);

图标显示在列表的子项中:

int nInd = lst.InsertItem(c, L"Main label");

lst.SetItem(nInd, nSubitemIndex, LVIF_TEXT | LVIF_IMAGE, L"2 files", nIconInd, 0, 0, 0);

那我做错了什么?

附言。我在具有 32 位真彩色显示设置的 Windows 8.1 上运行了这个测试。

虽然图标本身是一个 256 色图像,因为我看不出有任何理由在一个带有 alpha channel 的 32 位图标上浪费空间来实现如此小的尺寸和简单的设计:

enter image description here

最佳答案

LVS_EX_FULLROWSELECTtransparency issues on XP ,您可能会遇到这种情况。您可能必须将图像所有者绘制到 ListView 上以保持透明度。或者,将图像加载到一个图像列表中,然后将背景颜色与 ListView 的颜色匹配的图像拷贝渲染到单独的图像列表,然后将第二个图像列表与 ListView 一起使用。

关于c++ - 为什么显示 ListView 图标时背景变黑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269418/

相关文章:

c++ - operator <- 在 C++ 中做什么?

c++ - dll依赖版本冲突

c++ - 在窗口上显示 STL 容器的内容?窗口.h

memory-management - VirtualAlloc对齐

c - Windows 有可以从 C 调用的 JSON API 吗?

c++ - 如何合并两个 LPCWSTR?

C++ 使用指针遍历数组

windows - 输入空格时批处理文件总是崩溃

linux - 将内容添加到文件中间..直到最后才阅读

c++ - 编辑控件替换背景需要选择HBRUSH吗?