Win32 SDK中Context Menu使用大致流程

1、CreatePopupMenu创建菜单
2、TrackPopupMenu显示菜单,系统会自动发个WM_CONTEXTMENU消息。
3、消息循环中使用WM_CONTEXTMENU处理,其他消息。

Context Menu的应用(if in MFC)直至探出菜单
Abstract:
    Windows不认为顶级菜单是Popup Menu!!!!!

Method ONE
///
Step 1:Edit in the resource editor
Step 2:CMenu::LoadMenu
Step 3:
m_Menu.GetSubMenu(0)->AppendMenu (MF_STRING|MF_POPUP|MF_ENABLED  ,11111,"123");
    m_Menu.GetSubMenu(0)->AppendMenu (MF_STRING|MF_POPUP|MF_ENABLED  ,11112,_T("321"));
Step 4:
void CMenuTestDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
    // TODO: Add your message handler code here
   
    m_Menu.GetSubMenu (0)->TrackPopupMenu (TPM_CENTERALIGN|TPM_RETURNCMD ,point.x  , point.y  ,this);

   
}
//
Method TWO:
Step 1:
CMenu m_Menu.CreateMenu ();
CMenu m_SubMenu.CreateMenu ();
Step 2:
m_SubMenu.AppendMenu (MF_STRING|MF_POPUP|MF_ENABLED  ,11111,"Sub1");
m_SubMenu.AppendMenu (MF_STRING|MF_POPUP|MF_ENABLED  ,11112,"Sub2");
Step 3:
m_Menu.AppendMenu (MF_POPUP,(UINT)m_SubMenu.m_hMenu ,"mainMenu");
Step 4:
void CMenuTestDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
    // TODO: Add your message handler code here
   
    m_Menu.GetSubMenu (0)->TrackPopupMenu (TPM_CENTERALIGN|TPM_RETURNCMD ,point.x  , point.y  ,this);

   
}


上次无法响应Context Menu点击事件的问题
Key words:
TrackPopupMenu, TPM_RETURNCMD

TrackPopupMenu中如果设置了TPM_RETURNCMD,则该函数以返回值形式给出用户所点击Menu Item的ID,且不再另行发送WM_COMMAND消息;若不设置该参数,则发送WM_COMMAND,并以WM_COMMAND消息的参数给出点击菜单项的ID。

MSDN CMenu::TrackPopupMenu 条目未提及此参数

MSDN TrackPopupMenu条目仅给出如下,未提及TPM_RETURNCMD与WM_COMMAND互斥的关系。

VC版本:6.0 professional
MSDN版本:6.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值