C++ MFC图像列表创建ILC_COLORDDB混乱突出显示

C++ MFC图像列表创建ILC_COLORDDB混乱突出显示,c++,mfc,gdi,imagelist,C++,Mfc,Gdi,Imagelist,在MFC中,当我创建图像列表时,使用以下标志: m_ImageListThumb.Create(0x20, 0x20, ILC_COLORDDB | ILC_COLOR32, 0, 1); 这种方式显示正确 我似乎需要使用ILC_COLORDDB,否则有时使用alpha高亮显示图像根本不会显示高亮显示的蓝色。但我的问题是,当使用ILC_COLORDDB时,如何修复蓝色覆盖以使其平滑,从而使其不呈颗粒状 如何修复此问题,使ILC_COLORDDB在单击时呈现平滑的蓝色高亮。ILC_COLOR

在MFC中,当我创建图像列表时,使用以下标志:

m_ImageListThumb.Create(0x20, 0x20, ILC_COLORDDB | ILC_COLOR32, 0, 1);

这种方式显示正确

我似乎需要使用ILC_COLORDDB,否则有时使用alpha高亮显示图像根本不会显示高亮显示的蓝色。但我的问题是,当使用ILC_COLORDDB时,如何修复蓝色覆盖以使其平滑,从而使其不呈颗粒状


如何修复此问题,使ILC_COLORDDB在单击时呈现平滑的蓝色高亮。

ILC_COLORDDB
ILC_COLOR32
是互斥的,不能同时使用这两个标志。看看他们的价值观:

#define ILC_COLORDDB 0x000000FE
#define ILC_COLOR32  0x00000020

如果指定了
ILC\U COLORDDB
,则imagelist将使用使用
CreateCompatibleBitmap
创建的位图,该位图与当前显示兼容,因此您从中获得的结果将随当前显示设置而变化。

Hmm,很有趣。我正在使用Windows 8运行该应用程序。你知道为什么使用ILC_COLOR32会得到一个漂亮的蓝色,而CreateCompatibleBitmap不会吗?不,事实上这看起来很奇怪,因为Win8不支持低于32 bpp的位图,你会期望兼容的位图最终也达到32 bpp。但我建议不要尝试使用
ILC\u COLORDDB
你只需使用
ILC\u COLOR32
并尝试解决你的alpha问题(不过你可能需要为此发布另一个问题)。
#define ILC_COLORDDB 0x000000FE
#define ILC_COLOR32  0x00000020