Решение 1
Если вы хотите использовать прозрачность, вам нужно создать список изображений с маской:
m_ImageList.Create(16, 16, ILC_COLOR32 | ILC_MASK, TF_COUNT, 1)
Solution 2
Другим (худшим) подходом является установка желаемого значения ba ckground цвет (после создания ImageList, но прежде чем добавлять иконки):
m_ImageList.SetBkColor(RGB(0xFF, 0xFF, 0xFF))
Проблема о цвет фона, что вы должны понять, который цвет фона использовать.
магическое число 16
Я не думаю, что ваша проблема о CComboBoxEx
почему-то возникают проблемы с числом 16
. Вместо этого, я думаю, ваши значки немного разные, например, некоторые по-настоящему 32-битные, а некоторые в другом формате. Вы можете протестировать его так:
m_ImageList.Create(16,16,ILC_COLOR32,TF_COUNT,1);
for (int nImage = 0; nImage < TF_COUNT; nImage++)
{
m_ImageList.Add(phIcons[0]);
}
m_cmbAction.SetImageList(&m_ImageList);
Этот код добавляет один и тот же значок несколько раз. Бьюсь об заклад, у вас не будет никаких проблем с этим. Теперь вы также можете попробовать следующее:
m_ImageList.Create(16,16,ILC_COLOR32,TF_COUNT,1);
for (int nImage = 0; nImage < TF_COUNT; nImage++)
{
m_ImageList.Add(phIcons[16]);
}
m_cmbAction.SetImageList(&m_ImageList);
И у вас наверняка будут все значки неправильными.
Update 1
У меня нет никаких проблем с 16+ прозрачных иконок на моем Win8.1, так что пришло время, чтобы подозревать, что программное обеспечение сторонних производителей или ваш собственный код является корнем проблемы. Вам нужно подготовить минимальный пример кода, который все еще содержит проблему, а затем попробовать его на другом компьютере. Лучше всего попробовать на виртуальной машине (вы можете загрузить готовый один here), чтобы уменьшить все возможные риски того, что программное обеспечение, которое вы установили на многих машинах сразу. Если ваш минимальный пример все еще показывает проблему на виртуальной машине, запишите ее и поделитесь с нами.
Сколько стоит TF_COUNT? Вы пытались вызвать 'm_ImageList.Create (16,16, ILC_COLOR32,1, TF_COUNT); вместо этого? – sergiol
Почему 'DestroyIcon (phIcons [nImage]);'? – sergiol
@sergiol Я создал значок с CreateIconIndirect - мне нужно его уничтожить в соответствии с https://msdn.microsoft.com/en-us/library/windows/desktop/ms648062(v=vs.85).aspx – BadJerry