MFC工具栏图标的颜色深度更高
Higher color depth for MFC toolbar icons?
我想知道如何在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);
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 如何在24位SDL_Surface上设置像素的颜色
- OpenGL在启用深度测试时不会丢弃我的碎片
- 如何从SDL_Surface获取特定像素的颜色
- C++尝试深度复制唯一指针时出现内存访问冲突
- 如何使用OpenCV同时显示"深度"和"颜色"视频图像
- 从OpenGL应用程序中提取颜色/深度缓冲区
- 在 UWP 中使用C++录制 Kinect V2.0(颜色和深度)
- 在 OpenGL 中将深度映射到颜色
- libpng获取原始颜色通道深度
- SDL2 OpenGL 4.2上下文,具有0个颜色位和0个深度位
- 深度+颜色的3D投影
- 在OpenGL中启用深度测试后,我的整个屏幕是空白的(恢复为清晰的颜色)-为什么
- Kinect SDK:对齐深度和颜色帧
- RealSense R200在高颜色分辨率和低深度分辨率时崩溃
- 为什么在CToolBar中使用高深度颜色的禁用按钮只是灰色框
- 如何在多样本纹理中渲染颜色和深度
- MFC工具栏图标的颜色深度更高