【问题标题】:Higher color depth for MFC toolbar icons?MFC 工具栏图标的颜色深度更高?
【发布时间】:2010-09-20 15:59:19
【问题描述】:

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

谁能指出一些简单代码的方向?

谢谢

【问题讨论】:

    标签: c++ mfc icons toolbars


    【解决方案1】:

    发生这种情况的原因是 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::Create?
    • 是的,我采用了以前的 16 色位图并使用 Visual Studio 对其进行了转换。根据创建,我完全按照您的说明进行操作,但有以下例外: CImageList m_imagelist; m_imagelist.Create(20, 20, ILC_COLOR8, 4, 4); ...
    • 当然,我明白这一点。我的图标是 16,15,我已经改变了(抱歉忘了提),我知道位图是 256 色(8 位)。让我明白的一点是如何使它与声明一起工作:
    • 这对我有用,使用 ILC_COLOR32 代替 ILC_COLOR8 获得 32 位彩色位图!好的。 ;)
    【解决方案2】:

    该解决方案完美无瑕,您只需稍作修复即可:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 2019-03-11
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      相关资源
      最近更新 更多