CContextMenuManager上下文菜单管理器以及为菜单添加图标

转载 2015年11月19日 12:23:10

在Visual Studio 2008SP1中,要弹出上下文关联菜单的话,只需要在应用程序初始化的时候调用CWinAppEx::InitContextMenuManager,然后使用CWinAppEx::GetContextMenuManager获得一个指向应用程序的上下文管理器。
如果工程是单文档/多文档的话,可能会自动关联一个右键菜单,可以在应用程序的实现文件看到类似如下代码:

// CXXXApp 自定义加载/保存方法 
void CXXXApp::PreLoadState() 

    BOOL bNameValid; 
    CString strName; 
    bNameValid = strName.LoadString(IDS_EDIT_MENU); 
    ASSERT(bNameValid); 
    GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EDIT); 

要弹出菜单的时候,只需要调用ShowPopupMenu即可。如下类似:

BOOL CXXXForEdit::PreTranslateMessage(MSG* pMsg) 
{     
    if   ((pMsg->message   ==   WM_RBUTTONDOWN))   
    { 
        CPoint point(pMsg->pt);         
        theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE); 
        return   TRUE;  
    } 
    else   
        return CXXXForEdit::PreTranslateMessage(pMsg); 

如果是要弹出另一个菜单资源ID的话,需要先在CXXXApp::PreLoadState()里面添加快捷菜单,如下:

void CXXXApp::PreLoadState() 

    BOOL bNameValid; 
    CString strName; 
    bNameValid = strName.LoadString(IDS_EDIT_MENU); 
    ASSERT(bNameValid); 
    GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EDIT); 
    GetContextMenuManager()->AddMenu(_T("专门编辑"), IDR_POPUP_FOREDIT); 

这时,才能使用下面语句调用:

theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_FOREDIT, point.x, point.y, this, TRUE); 

要为菜单添加图标的话,要使用到CMFCToolBar::AddToolBarForImageCollection ()函数,其函数原型如下:

static BOOL __stdcall AddToolBarForImageCollection( 
   UINT uiResID,    //Resource ID of a toolbar with images to load. 
   UINT uiBmpResID=0,    //Resource ID of a bitmap with toolbar images. 
   UINT uiColdResID=0,    //Resource ID of a bitmap with "cold" toolbar images. 
   UINT uiMenuResID=0,    //Resource ID of a bitmap with menu images. 
   UINT uiDisabledResID=0,//Resource ID of a bitmap with disabled toolbar images. 
   UINT uiMenuDisabledResID=0 //Resource ID of a bitmap with disabled menu images. 
); 

在资源视图ToolBar插入一个ToolBar,然后创建四个工具栏对象,如下图所示:

接着四个工具栏对象的ID号要跟需要绑定到菜单项图标的ID号一致,且顺序一致。接着把预先准备好的工具栏图像位图BMP,加载到资源视图里面,修改其ID为IDB_POPUP_BITMAP,如下图所示:

 

然后,在初始化函数OnInitialUpdate()下添加入下代码:

CMFCToolBar::AddToolBarForImageCollection (IDR_TOOLBAR1,IDB_POPUP_BITMAP); 

运行程序就可以看到效果了,但是此时还是灰色状态,为菜单项“添加事件处理程序”,结果如下图所示:

 

参考资料:
1.CContextMenuManager http://msdn.microsoft.com/en-us/library/bb982387.aspx
2.CMFCToolBar::AddToolBarForImageCollection http://msdn.microsoft.com/en-us/library/bb983344%28VS.90%29.aspx
3.BCGControlBar菜单编程方法详解 http://www.evget.com/zh-CN/Info/catalog/14414.html

CContextMenuManager上下文菜单管理器以及为菜单添加图标

在Visual Studio 2008SP1中,要弹出上下文关联菜单的话,只需要在应用程序初始化的时候调用CWinAppEx::InitContextMenuManager,然后使用CWinAppEx...
  • u011519892
  • u011519892
  • 2013年12月09日 19:46
  • 1234

Android选项菜单和上下文菜单解析

选项菜单 创建选项菜单 Activity类的onCreateOptionMenu事件方法用来创建选项菜单,该方法定义如下: @Override public boolean onCreateOpti...
  • GULINHAI12
  • GULINHAI12
  • 2015年08月12日 12:06
  • 6718

窗口程序(JFrame)创建菜单。菜单项。菜单条。

创建一个窗口程序(JFrame),标题栏起名为“浏览器”,有一个菜单条,有“文件”、“编辑”、“查看”3个菜单。文件菜单有两个菜单项,一项是“打开”,一项是“保存”,“打开”项做成子菜单,有两个菜单项...
  • xiaoyuyully
  • xiaoyuyully
  • 2016年11月22日 11:31
  • 2637

CContextMenuManager上下文菜单管理器以及为菜单添加图标

转自:http://blog.csdn.net/akof1314/article/details/6075902 在Visual Studio 2008SP1中,要弹出上下文关联菜单的话,只需...
  • tianshi_1988
  • tianshi_1988
  • 2016年11月20日 22:34
  • 424

搜索软件Everything自定义设置外部文件管理器和上下文菜单

  • 2016年02月14日 12:31
  • 79KB
  • 下载

MFC---上下文菜单(快捷菜单)管理器

在MFC中的app类的InitInstance函数中,我们会看到这样一个函数,InitContextMenuManager,从它的字面意义可以看出是“初始化上下文菜单管理器”。像这样,在初始化函数中调...
  • xinzhiyounizhiyouni
  • xinzhiyounizhiyouni
  • 2013年12月31日 19:29
  • 1462

Windows Shell扩展系列文章 2 - .NET 4为扩展的Windows Shell上下文菜单项添加位图图标

在“Windows Shell扩展系列文章 1 - .NET 4 编写Windows Shell上下文菜单扩展”一文中,我们介绍了如何使用.NET 4编写VC#或VB.NET代码创建Windows S...
  • MSCodeSample
  • MSCodeSample
  • 2011年03月28日 01:14
  • 3055

OpenWrt的luci web管理器添加新菜单

OpenWrt的luci web管理器添加新菜单本篇博客主要描述luci添加菜单的两个实例,即CBI和View(Template): 添加新元素到luci中去 添加新的顶级选项卡标签(主菜单) 添加c...
  • sonbai
  • sonbai
  • 2015年09月28日 15:51
  • 4475

将UltraEdit添加到资源管理器的右键菜单

在菜单栏选项中
  • polar9527
  • polar9527
  • 2014年08月19日 16:37
  • 499

OpenWrt的luci web管理器添加新菜单(三)

本文描述了openwrt如何实现Web界面,以及实现登录界面和配置文件解析等相关内容...
  • sonbai
  • sonbai
  • 2015年10月09日 10:51
  • 2478
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CContextMenuManager上下文菜单管理器以及为菜单添加图标
举报原因:
原因补充:

(最多只允许输入30个字)