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;
}

posted on 2013-12-11 14:59  炎火焚荒  阅读(3433)  评论(0编辑  收藏  举报

导航