我想实现这样的功能:当鼠标移到按钮区域时会弹出一个菜单,我用TrackPopupMenu可以实现,当鼠标移开时关闭菜单。现在我可以捕获到鼠标移开按钮的消息,但是怎么在这个消息响应函数里去关闭菜单呢

解决方案 »

  1.   

    BOOL DestroyMenu(
      HMENU hMenu  // handle to menu
    );
      

  2.   

    不行的,当鼠标移走菜单还在的。再说这样是将那个菜单彻底destroy了,当鼠标再次移动到按钮上时,就不会有菜单弹出了。我不想每次都LoadMenu的
      

  3.   

    在TrackPopupMenu后是模态的,所以你想得到鼠标移动“按钮区域”的消息得通过hook来得到,至于取消原来的菜单好像是跟WM_CANCELMODE有关,具体看msdn上的文章
    http://www.microsoft.com/msj/0199/c/c0199.aspx
      

  4.   

    通过发WM_CANCELMODE消息可以关闭菜单,谢谢DreamWeaverII。不过我发现当菜单弹出的时候虽然鼠标还在按钮的上方。但是这时也会发WM_MOUSELEAVE的消息出去,我是通过TrackMouseEvent函数来判断鼠标是否离开控件的。看来这样的功能实现起来肯定是很麻烦的。谢谢各位。
      

  5.   

    在调用TrackPopupMenu之前先调用SetForegroundWindow