gpt4 book ai didi

mfc - MFC 功能包类菜单上的图标

转载 作者:行者123 更新时间:2023-12-04 03:59:16 31 4
gpt4 key购买 nike

在新的 MFC 功能(功能包)中,菜单出现在三个地方:

  • 在菜单栏中 (CMFCMenuBar)
  • 在弹出菜单中 (CMFCPopupMenu)
  • 在 CMFCButton 的“下拉菜单”版本中

  • 我想在所有菜单中放置图标(高颜色和透明)。我找到了 CFrameWndEx::OnDrawMenuImage() ,我可以用它来自定义绘制菜单栏项目前面的图标。不是很方便,必须在2008年实现图标绘制,但是可以。对于其他人,我还没有找到解决方案。有没有自动设置菜单图标的方法?

    最佳答案

    这就是我让它工作的方式:

    第一的

    ,正如其他人所说,在主工具栏旁边创建一个不可见的工具栏(我使用的是基于 AppWizard 名称的常用名称):

    MainFrm.h:
    class CMainFrame
    {
    //...
    CMFCToolBar m_wndToolBar;
    CMFCToolBar m_wndInvisibleToolBar;
    //...
    };

    MainFrm.cpp:
    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    //...

    // Normal, visible toolbar
    if(m_wndToolBar.Create(this,
    TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC))
    {
    VERIFY( m_wndToolBar.LoadToolBar(
    theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME) );

    // Only the docking makes the toolbar visible
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    DockPane(&m_wndToolBar);
    }

    // Invisible toolbar; simply calling Create(this) seems to be enough
    if(m_wndInvisibleToolBar.Create(this))
    {
    // Just load, no docking and stuff
    VERIFY( m_wndInvisibleToolBar.LoadToolBar(IDR_OTHERTOOLBAR) );
    }
    }

    二:图片和工具栏资源
    IDR_MAINFRAMEIDR_MAINFRAME_256由 AppWizard 生成。前者是丑陋的16色版,后者是有趣的高色版。
    尽管它的名字,如果我没记错的话,即使是 AppWizard 生成的图像也有 24 位色深。很酷的事情:只需用 32 位图像替换它,它也可以工作。

    有隐形工具栏 IDR_OTHERTOOLBAR :我用资源编辑器创建了一个工具栏。只是一些虚拟图标和命令 ID。 VS 然后生成了一个位图,我用我的高色版本替换了它。完毕!

    笔记

    不要使用资源编辑器打开工具栏:它可能必须先将其转换为 4 位,然后才能对其进行任何操作。即使你让它这样做(因为,在 Visual Studio 的背后,你将再次用高色图像替换结果,哈!),我发现它(有时?)根本无法编辑工具栏。很奇怪。
    在这种情况下,我建议直接编辑 .rc 文件。

    关于mfc - MFC 功能包类菜单上的图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70386/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com