制作com接口的ie工具栏有下拉按钮,点击按钮弹出菜单,如何响应菜单消息?

解决方案 »

  1.   

    ::TrackPopupMenu(hOldMenu,TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD,
    rc.left , rc.bottom ,0,m_hWnd,NULL); 请问和这个函数有关系吗?该工具栏中的按钮,下拉小箭头的消息我都可以处理,,就是没不知道怎么处理弹出菜单?
      

  2.   

    CPoint ptDown;
    HMENU hMenu;
    hMenu=CreatePopupMenu();
    AppendMenu(hMenu, MF_STRING, 1, "添加");
    AppendMenu(hMenu, MF_SEPARATOR, 0, "");
    AppendMenu(hMenu, MF_STRING, 2, "删除");
    GetCursorPos(&ptDown);
    reval=TrackPopupMenu(hMenu,TPM_TOPALIGN | TPM_RETURNCMD,ptDown.x,ptDown.y,NULL,m_hWnd,NULL);
    switch(reval)
    {
    case 1:
    //添加
    break;
    case 2:
    //删除
    break;
    }
      

  3.   

    原来是TrackPopupMenu的问题。学习一下,作个记号。
        
      

  4.   

    可能我没说明白,,菜单是可以正常弹出来的,关键是如何响应菜单项的消息,TrackPopupMenu都没问题我这是用com接口做的一个停靠在ie里的工具栏,是一个浏览器插件,,查了一下资料,说是atl的消息映射和mfc不一样,那么atl该用什么做菜单的消息映射?
    我试过COMMAND_ID_HANDLER(ID_MENUITEM32768,Onmenuchick)
    但是在没有响应,,,,,,,,,,,,大家有没有了解这个的???
      

  5.   

    菜单右键菜单有两种方式,一种是直接通过TrackPopupMenu的返回值,一种是通过菜单消息。
    我上面说的是第一种方式,直接通过返回值来判断选择了哪一个菜单单项。
      

  6.   

    如果想使用响应消息的方式(即第二种),那在使用TrackPopupMenu函数时不能设置TPM_RETURNCMD参数,而要设置TPM_NONOTIFY参数,且m_hWnd不能为空。
      

  7.   

    fengrx::你说的完全正确,谢谢。我这里返回的是资源ID,,,应该是一样的稍后就结贴,,,我研究一下怎么给分
    再次感谢