CContextMenuManager菜单使用(转)

 今天看到论坛上有人在问上下文菜单管理器类CContextMenuManager的问题,记得做过,但是忘了,忙里偷闲记下来,免得下次又忘了...

       CContextMenuManager和CMenu同样是继承于CObject,请看这里。不过菜单画得比CMenu好看多了,因此很多人愿意使用它。如何使用大家MSDN就是了。

       但是,假如你觉得不想创建一个CContextMenuManager类来管理你的菜单。其实,还有一个方法:CWinAppEx还有这么一个方法,CContextMenuManager类型,你想增加菜单的话,

theApp.GetContextMenuManager()->AddMenu(L"Menu", IDR_MENU1); 


       其实就是使用CContextMenuManager的方法了。假如你的菜单还没有初始化,还要调用CWinApp::InitContextMenuManager方法进行初始化。

       在使用这个菜单的时候我遇到一个问题,就是当想要把菜单某项变灰。一开始我用以前像CMenu那样的方法去解决,但是不见效果。后来在MSDN论坛里边找到了解决方法。调用ON_UPDATE_COMMAND_UI宏来更新属性窗口的对象ID,使用OnUpdateContextFirst方法即可。

theApp.GetContextMenuManager()->AddMenu(L"Menu", IDR_MENU1);       

 头文件afx_msg void OnUpdateContextFirst(CCmdUI *pCmdUI);       

源文件 

 ON_UPDATE_COMMAND_UI(ID_VOD_MENU_UNPUBLISH, &CXXXDlg::OnUpdateContextFirst) 

void CXXXDlg::OnUpdateContextFirst(CCmdUI *pCmdUI)

  { pCmdUI->Enable( m_bEnable );// m_bEnable让你觉得菜单项是否Disabled 

  }

假如你想Disabled某项   

m_bEnable=FALSE;   

HMENU hMenu=theApp.GetContextMenuManager()->GetMenuById(IDR_MENU1);   

EnableMenuItem( hMenu, 1, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);   

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

OK,其实就这么一个小问题。CContextMenuManager菜单效果差强人意,遇到问题只要你肯搜,大多数还是能够解决的。

posted @ 2011-08-15 11:26  心随灵动  阅读(2281)  评论(0编辑  收藏  举报