【发布时间】: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