【问题标题】:Why am I getting black background when displaying a list-view icon?为什么在显示列表视图图标时会出现黑色背景?
【发布时间】:2014-06-17 16:55:59
【问题描述】:

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

我是这样加载的:

//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 位图标上,以实现如此小的尺寸和简单的设计:

【问题讨论】:

  • 因为你有一个白色的背景,你可以把白色放在那里,但我相信如果你想要一个透明度,你需要一个 Alpha 通道
  • " 我看不出有任何理由在 32 位图标上浪费空间" - 你在这个问题上浪费的时间真的值得节省几百字节?
  • 背景取决于用户在CP中的选择。所以它不一定是白色的。至于添加 alpha 通道图标——它在 Win 8.1 上看起来不错,但是当我在具有 16 位配色方案的旧 XP 机器上加载应用程序时,它仍然显示黑色背景。另外,我不只有 1 个图标。远不止这些。
  • 您将图像列表配置为带有 alpha 的 32 位颜色,然后提供了不带 alpha 的图像。提供带有 alpha 的图像,一切都很好。

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


【解决方案1】:

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

【讨论】:

  • @c00000fd:是的,XP 不能很好地处理透明度。如果我是您,我会将您的 all 列表视图呈现为自定义绘制。这并不难。 Here's 一个很好的示例代码,它展示了如何正确地做到这一点。
  • 似乎与 XP 无关。 XP可以很好地处理透明度。这里当然不需要所有者抽签。
【解决方案2】:

也许现在桥下有水,但我在有问题的图像列表上发现了 8 位的色深设置。将其设置为 32 会导致透明度按预期工作...

【讨论】:

    【解决方案3】:

    在此处查看此线程 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='*'\"")
    

    别问了……但我花了很长时间才弄明白

    【讨论】:

    • 谢谢。我不能确认也不能否认它是否解决了这个问题。我已经有一段时间没有搞砸了。
    猜你喜欢
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多