Почему при отображении значка списка отображается черный фон?

Я не уверен, почему я получаю этот черный контур, когда я добавляю значок в 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-битного цветного дисплея.

Сам значок, тем не менее, представляет собой 256-цветное изображение, поскольку я не вижу смысла тратить место на 32-разрядный значок с альфа-каналом для такого небольшого размера. & простой дизайн:

введите описание изображения здесь

0

Решение

LVS_EX_FULLROWSELECT имеет вопросы прозрачности на XP, Вы, вероятно, столкнулись с этим. Возможно, вам придется нарисовать изображения владельца в виде списка, чтобы сохранить прозрачность. Или загрузите изображения в один список изображений, затем визуализируйте копию изображений с цветом фона, соответствующим цвету представления списка, в отдельный список изображений, а затем используйте второй список изображений с представлением списка.

2

Другие решения

Может быть, вода под мостом к настоящему времени, но я нашел настройки глубины цвета 8 бит в моем оскорбительном списке изображений. Установка его в 32 привела к прозрачности, работающей как ожидалось …

1

Проверьте эту тему здесь
Получение альфа-смешивания для работы с 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='*'\"")

Даже не спрашивай … но мне понадобилось много времени, чтобы выяснить это

0
По вопросам рекламы [email protected]