1.使用VS2010或VS2008SP1提供的CMFCxxxx框架时,弹出菜单的调用发生了变化,但与之前使用CMenu产生弹出菜单相同的是都是响应窗口的WM_CONTEXTMENU消息中进行。
2.使用CContextMenuManager产生的弹出菜单比CMenu产生的弹出菜单漂亮。
3.不要继承或者手动实例化CContexMenuManager类,通过CWinAppEx::GetContextMenuManager()方法调用全局的CContextMenuManager对象,但使用要注意:(1)在CWinAppEx::InitInstance()中需要调用CWinAppEx::InitContextMenuManager()来初始化全局对象;(2)在CWinAppEx::ExitInstance()函数中会自动完成全局对象的清理,但如果是CWinApp::ExitInstance()未释放全局对象,就会造成内存泄露;(3)在加载菜单前需要在CWinAppEx::PreLoadState()函数中使用CContextMenuManager::AddMenu()提前加载菜单资源,之后才能调用ShowPopupMenu()或TrackPopupMenu()
4.对于ShowPopupMenu和TrackPopupMenu有如下区别:
virtual BOOL ShowPopupMenu(
UINT uiMenuResId, //用资源ID进行加载,
int x,
int y,
CWnd* pWndOwner,