题
有三个地方在哪里菜单显示了在新的MFC功能(特征包):
- 在菜单上吧(CMFCMenuBar)
- 在弹出的菜单(CMFCPopupMenu)
- 在下拉式菜单的版本的CMFCButton
我想要把图标(高颜色和有透明度)在菜单中所有的人。我已经找到CFrameWndEx::OnDrawMenuImage()我可以使用定制的绘图标中的前面的菜单吧项目。这不是很方便,具有执行图标绘图2008年,但它的工作。对于其他我还没有找到一个解决方案。是否有一个自动的方式设定的图标菜单?
解决方案
这是我得到了它的工作:
第一
, 如其他人所述,创建一个无形的工具栏旁的主要工具栏(我采用通常的名称的基础上应用程序向导名):
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_MAINFRAME
和 IDR_MAINFRAME_256
所产生的应用程序向导.前者是丑陋的16色的版本,而后者是有趣的高颜色的版本。
尽管有其名称,如果我记忆正确,即使该应用程序向导-生成的图象有24位颜色的深度。很酷的事情:只是取代它的一个32位的图像和这会的工作。
还有看不见的工具条 IDR_OTHERTOOLBAR
:我创建了一个工具栏的资源编辑器。只是一些虚拟的图标和命令的身份证。VS然后产生的一位,我更换我的高颜色的版本。做!
注意到
不要打开工具栏的资源编辑:它可能需要将其转换为4位之前,它可以用它做任何事情。甚至 如果 你让它这样做(因为背后的视觉工作室的后面,无极们要替换的结果,与高彩色图像,再次,哈哈!), 我发现它(有时?) 无法简单地编辑工具栏。非常奇怪的。
在这种情况下,我建议直接编辑。rc文件。
其他提示
我认为(但是我可能是错的),这些课程是一样的BCGToolbar类别包括在MFC当微软公司购买了卡介苗。如果是这样,你可以创建一个工具条和使用同一标识在一个工具栏按钮在菜单项的要创建的图标,他们应该自动出现。当然,你不必实际上显示的工具栏。
在BCGToolbar,这足以创造一个工具栏中的资源和载(但不显示窗口),但该工具栏按钮必须有相同的ID的菜单项的要链接。
尝试使用这种功能:
CMFCToolBar::AddToolBarForImageCollection(UINT uiResID,
UINT uiBmpResID=0,
UINT uiColdResID=0,
UINT uiMenuResID=0,
UINT uiDisabledResID=0,
UINT uiMenuDisabledResID=0);
所以,例如:
CMFCToolBar::AddToolBarForImageCollection(IDR_TOOLBAROWNBITMAP_256);
工作非常出色的我。
有一件事可以抓一个人惊讶的是,对定制(即,非锁定)栏,第一工具栏作,该框架分裂并变成某种形式的调色板位的所有标程序。如果你试图添加更多的工具栏后面的(或不同的工具栏),必位图(或png)与不同颜色的深度比,第一个,他们似乎失败,因为它不能将它们添加到相同的调色板。