VS2010中右键菜单的添加

1、资源文件.rc里面,右键添加资源,选择菜单,添加菜单。
2、程序中添加响应WM_ContextMenu消息的函数
3、在函数中添加如下代码
void CMenu3View::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: 在此处添加消息处理程序代码
        //if语句块在用shift+f10组合键产生右键菜单时执行
if (point.x == -1 && point.y == -1)   
{
CRect rect;
GetClientRect(rect);
ClientToScreen(rect);
point = rect.TopLeft();
point.Offset(5, 5);
}
CMenu menu;
VERIFY(menu.LoadMenu(IDR_MENU1));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CWnd* pWndPopupOwner = this;
while (pWndPopupOwner->GetStyle() & WS_CHILD) 
pWndPopupOwner = pWndPopupOwner->GetParent();
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, 


point.x, point.y, pWndPopupOwner);
}
1、WM_ContextMenu消息的产生可能是由鼠标右键按下并释放后产生,也有可能键盘按下shift+f10组合键产生,两张方式产生的此消息都会使得右键菜单的出现。并且按下shift+f10组合键的时候,OnContextMenu中的point为(-1,-1)
2、OnContextMenu函数中point参数的屏幕坐标。
3、ASSERT与VERIFY宏在Debug模式下作用基本一致,二者都对表达式的值进行计算,如果值为非0,则什么事也不做;如果值为0,则输出诊断信息。即验证括号里面的语句有没有操作成功。
4、上述操作解释:首先判断是点击右键启动快捷菜单还是shift+f10来启动快捷菜单,如果是shift+f10,则执行if语句块,否则忽略if语句块;然后定义一个CMenu对象:menu,接着加载(LoadMenu函数)菜单资源,并获取该菜单的第一个子菜单(GetSubMenu),对快捷菜单来说,实际上只有一个子菜单(位置索引号为0)。最后调用TracePopMenu函数显示快捷菜单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值