MFC Feature Pack类菜单上的图标

Roe*_*oel 8 mfc mfc-feature-pack

菜单中有三个位置显示在新的MFC功能(Feature Pack)中:

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

我想在所有菜单的菜单中加上图标(高色和透明).我找到了CFrameWndEx :: OnDrawMenuImage(),我可以使用它来自定义菜单栏项目前面的图标.这不是很方便,不得不在2008年实施图标绘制,但它确实有效.对于其他人,我还没有找到解决方案.是否有自动设置菜单图标的方法?

for*_*idt 4

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

第一的

正如其他人所说,在主工具栏旁边创建一个不可见的工具栏(我使用基于 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) );
    }
}
Run Code Online (Sandbox Code Playgroud)

第二:图像和工具栏资源

IDR_MAINFRAME并由IDR_MAINFRAME_256AppWizard 生成。前者是丑陋的16色版本,后者是有趣的高色版本。
尽管它的名字如此,如果我没记错的话,即使是 AppWizard 生成的图像也具有 24 位颜色深度。最酷的事情是:只需将其替换为 32 位图像即可。

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

笔记

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