MFC工具栏图标的颜色深度更高

Higher color depth for MFC toolbar icons?

本文关键字:色深度 颜色 工具栏 图标 MFC      更新时间:2023-10-16

我想知道如何在MFC中制作一个使用24位或256色位图而不是可怕的16色位图的工具栏。

有人能给我指出一些简单代码的方向吗?

感谢

发生这种情况的原因是MFC CToolbar类在内部使用了一个图像列表,该列表已初始化为仅使用16种颜色。解决方案是创建我们自己的图像列表,并告诉工具栏使用它。我知道这适用于256种颜色,但我还没有用更高的比特深度测试过:

首先,从资源中加载一个256色位图:

HBITMAP hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_BITMAP,
    0,0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
CBitmap bm;
bm.Attach(hBitmap);

接下来,创建一个256色的图像列表,并将我们的位图添加到其中:

CImageList m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4);
m_imagelist.Add(&bm, (CBitmap*) NULL);

最后,我们需要告诉工具栏使用新的图像列表:

m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist);

VS2008中的新MFC版本也可能解决了这个问题,因为我知道许多UI元素已经更新。我还没有真正尝试过使用它,所以我不能确定。

该解决方案完美无瑕,您只需要稍微修复一下:

CImageList m_imagelist;
m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4); 
m_imagelist.Add(&bm, (CBitmap*) NULL);