【发布时间】:2010-09-20 15:59:19
【问题描述】:
我想知道如何在 MFC 中制作一个使用 24 位或 256 色位图而不是可怕的 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);
【讨论】: