为什么在显示列表视图图标时会出现黑色背景?

时间:2014-06-17 16:55:59

标签: c++ windows winapi mfc common-controls

当我向CListCtrl(或列表视图控件)添加图标时,我不确定为什么会出现这个黑色轮廓?

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);

列表视图首先准备好了:

//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);

那么我做错了什么?

PS。我在Windows 8.1上使用32位trucolor显示设置运行此测试。

图标本身虽然是256色图像,因为我没有看到任何理由在带有alpha通道的32位图标上浪费空间以获得如此小的尺寸和图像。简单的设计:

enter image description here

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

现在可能在桥下浇水,但我在违规图像列表上发现了8位的colordepth设置。将其设置为32导致透明度按预期工作......

答案 2 :(得分:0)

点击此处查看此主题 Getting alpha blending to work with CImageList

添加一行C ++文件可以解决这个问题:

enter code here
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

甚至不要问......但我花了很长时间才发现