• 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菜单效果差强人意,遇到问题只要你肯搜,大多数还是能够解决的。

  • 相关阅读:
    40. Combination Sum II
    39. Combination Sum
    找一找
    37. Sudoku Solver
    Activiti 多个并发子流程的应用
    BPMN2新规范与Activiti5
    BPMN这点事-BPMN扩展元素
    JAVA规则引擎 -- Drools
    工作流Activiti5流程变量 任务变量 setVariables 跟 setVariablesLocal区别
    activiti 学习( 三 ) 之 流程启动者
  • 原文地址:https://www.cnblogs.com/myitm/p/2139143.html
Copyright © 2020-2023  润新知