首页 > 代码库 > 添加右键菜单
添加右键菜单
有2种方式添加右键菜单:
1.无需在资源中添加Menu
(1) 在.h中定义HMenu变量,在.cpp中初始化菜单项。
HMenu m_hMenu; // .h中定义m_hMenu = CreatePopupMenu(); // InitDialog中初始化MENUITEMINFO mi;mi.cbsize = sizeof(mi);mi.fMask = MIIM_ID | MIIM_STRING;mi.fType = MFT_STRING;mi.fState = MFS_ENABLED; // 使能. MFS_DISABLED(不使能)mi_wID = 1;mi_dwTypeData = _T("Select All");InsertMenuItem(m_hMenu,0,TRUE,&mi);mi_wID = 2;mi_dwTypeData = _T("Clear");InsertMenuItem(m_hMenu,1,TRUE,&mi);
(2) 重载右键按下消息 OnRButtonDown
ClientToScreen(&point); // 转换为屏幕坐标OnContextMenu(this,point);
(3) 重载OnContextMenu函数
mi.cbSize = sizeof(mi);mi.fMask = MIIM_STATE;mi.fState = MFS_ENABLED;SetMenuItemInfo(m_hMenu,2,FALSE,&mi); // 2表示位置
INT cmdID = (INT)TrackPopupMenu(m_hMenu,TPM_RETURNCMD,point.x,point.y,0,this->m_hWnd,NULL); // 此处必须为TPM_RETURNCMD,可以返回0,1,2,3...否则只返回0,1的值
switch(cmdID)
{
case 1: // select all
OnEditSelectAll(); // 响应函数
break;
case 2: // copy
this->copy();
break;
default:
break;
}
2.在资源文件中添加菜单资源
(1)资源文件中添加弹出菜单资源
(2)添加对应菜单项的响应函数
(3)重载OnContextMenu函数
CMenu menu;menu.LoadMenu(IDR_POPUPMENU); // IDR_POPUPMENU为自定义的弹出菜单IDCMenu *popMenu = menu.GetSubMenu(0);popMenu->EnableMenuItem(ID_EDIT,MF_BYCOMMAND | MF_DISABLE | MF_GRAYED); // 使这一菜单项变灰,失效popMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x,point.y,this);
// 假如坐标不对,可以重载右键按下,调用ClientToScreen,再调用OnContextMenu
添加右键菜单
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。