zoukankan      html  css  js  c++  java
  • MFC listcontrol添加右键菜单

    //listCtrl追加右键菜单

    //头文件声明
    int displayContextMenu(CPoint SelectPoint, int iFlag);
    enum ListCmdID
    {
     ID_MENU_ENUM_FIRST = WM_USER+10,
     ID_MENU_LISTITEM_DEL_USER,
     ID_MENU_LISTITEM_EDIT_USER,
     ID_MAX_LIST_CMD
    };

    //消息映射

    ON_COMMAND_RANGE(ID_MENU_ENUM_FIRST, ID_MAX_LIST_CMD-1, onContextCmd)

    //函数定义

    void CMylistView::onContextCmd( UINT ID )
    {
     CListCtrl &lc = GetListCtrl();
     switch( ID )
     {
     case ID_MENU_1:
      //操作
      break;
     case ID_MENU_2:
      //操作;
      break;
     case ID_MENU_3:
      //操作;
      break;
     }
    }

    void CMylistView::OnNMRclick(NMHDR *pNMHDR, LRESULT *pResult)
    {
     CListCtrl &lc = GetListCtrl();

     UINT flags;
     CPoint SelectPoint;
     GetCursorPos(&SelectPoint);
     lc.ScreenToClient(&SelectPoint);
     
     int iLine = lc.HitTest( SelectPoint, &flags );
     int iFlag = 0;
     lc.ClientToScreen(&SelectPoint);

     //根据实际情况把菜单格式分类iFlag
     displayContextMenu( SelectPoint,iFlag );
     *pResult = 0;
    }

    int CMylistView::displayContextMenu(CPoint SelectPoint, WORD wShowFlag )
    {
     CListCtrl &lc = GetListCtrl();
     CPoint pt( SelectPoint );
     lc.ScreenToClient(&pt);
     UINT flags;
     CMenu menu;
     int iLine = lc.HitTest( pt, &flags);

     //check click on item or not
     bool bOnItem = (flags & TVHT_ONITEM) != 0;   
     VERIFY(menu.CreatePopupMenu());

     VERIFY(menu.AppendMenu(MF_STRING, ID_MENU_LISTITEM_ADD, _T("例如")));
     VERIFY(menu.AppendMenu(MF_STRING, ID_MENU_TREEITEM_DEL,  _T("例如")));
     VERIFY(menu.AppendMenu(MF_SEPARATOR));
     VERIFY(menu.AppendMenu(MF_STRING, ID_MENU_TREEITEM_EDIT,  _T("例如")));

     //不可用并且变灰
     menu.EnableMenuItem( ID_MENU_LISTITEM_ADD, MF_GRAYED | MF_DISABLED );
     menu.EnableMenuItem( ID_MENU_TREEITEM_DEL, MF_GRAYED | MF_DISABLED );
     menu.EnableMenuItem( ID_MENU_TREEITEM_EDIT, MF_GRAYED | MF_DISABLED );
     
     if( wShowFlag & 0x04 )
     {
      menu.EnableMenuItem( ID_MENU_LISTITEM_ADD, MF_ENABLED );
     }
     if( wShowFlag & 0x02 )
     {
      menu.EnableMenuItem( ID_MENU_TREEITEM_DEL, MF_ENABLED );
     }
     if( wShowFlag & 0x01 )
     {
      menu.EnableMenuItem( ID_MENU_TREEITEM_EDIT, MF_ENABLED );
     }
     if(menu.GetMenuItemCount() > 0 && bOnItem )
     {
      menu.TrackPopupMenu(  TPM_RIGHTBUTTON , SelectPoint.x, SelectPoint.y, this);
     }
     return 0;
    }

  • 相关阅读:
    SparkR初体验2.0
    R语言数据集合并、数据增减、不等长合并
    采坑复盘:logging日志能用封装后的函数来打日志,发现filename一直显示封装logging函数的方法所在的文件名
    flask实战-个人博客-编写博客前台
    flask实战-个人博客-电子邮件支持
    linux虚拟机获取不到ip的解决方法 --
    flask实战-个人博客-视图函数
    flask实战-个人博客-表单
    flask实战-个人博客-模板 --
    flask实战-个人博客-数据库-生成虚拟数据 --
  • 原文地址:https://www.cnblogs.com/yanhuofenhuang/p/3469412.html
Copyright © 2011-2022 走看看