我想知道如何在MFC中制作一个使用24位或256色位图的工具栏而不是可怕的16色位图。
有人能指点我一些简单的代码吗?
由于
答案 0 :(得分:11)
发生这种情况的原因是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元素已经更新。我还没有尝试过使用它,所以我无法确定。
答案 1 :(得分:0)
解决方案完美无瑕,您只需稍微修复一下:
CImageList m_imagelist;
m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4);
m_imagelist.Add(&bm, (CBitmap*) NULL);