ON_WM_INITMENUPOPUP

本文展示了在打 开特定的弹出菜单时,如何轻松有效地调用handler函数。 这个问题 使用MFC时,你需要在打开弹出菜单时从框架中得到一个回调函数,您可以通过 ON_WM_INITMENUPOPUP()  轻松获得到 OnInitMenuPopup()

但是请注意,这个处理程序是为当前窗口中的每个弹出菜单调用的。如果您想为所有菜单做一些通用的操作,这很好。但是如果你需要对一个特定的弹出菜单进行一些特殊处理呢?  你就需要知道哪个弹出菜单才是你要找的。那么我们要做什么呢? 最简单的解决方案是“标记”弹出菜单,然后当回调被调用时,我们将搜索这个标记。如果能匹配上,则就是要找的菜单,否则什么也不做。

CMenu* pPopupMenu = AddPopupMenu(this, 2, 4, "Nikon D70s");
MENUINFO MenuInfo;
MenuInfo.cbSize = sizeof(MENUINFO);
MenuInfo.fMask = MIM_MENUDATA;  //允许获取/设置dwMenuData成员.
MenuInfo.dwMenuData = c_nCode;  //做个标识
//mark the popup menu:
pPopupMenu->SetMenuInfo( &MenuInfo );

现在,我们需要实现OnInitMenuPopup()回调。这个回调函数在每次打开弹出菜单时(严格来讲是打弹出前)被调用。在OnInitMenuPopup()中,我们得到的是指向菜单的指针,而不是指向菜单项目的指针。 所以现在就可以检查这个弹出菜单是不是我们在初始化时标记的那个菜单了。

void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
   MENUINFO MenuInfo;
   MenuInfo.cbSize = sizeof(MENUINFO);
   MenuInfo.fMask = MIM_MENUDATA;
   MenuInfo.dwMenuData = 0;
   VERIFY( pPopupMenu->GetMenuInfo( &MenuInfo ) );

   if(MenuInfo.dwMenuData == c_nCode) //比较标识
   {
      //call the handler!!!
      OnMarkedPopupMenu(pPopupMenu);
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值