今天看到论坛上有人在问上下文菜单管理器类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菜单效果差强人意,遇到问题只要你肯搜,大多数还是能够解决的。