我拦截了WM-INITMENU 和WM-INITPOPMENU 两个消息都不行。
这两个消息只有在菜单可见时,点击后触发。
请问,我需要拦截哪个消息呢?

解决方案 »

  1.   

    你用的是VB自带的菜单编辑器还是第三方控件????
    奇怪,刚刚试了一下用菜单编辑器做了一个菜单,再用myspy去找,居然没有找到hwnd
    不知这样做出来的菜单是不是详label和imagebox那样只是画在form上而没有句柄????
      

  2.   

    我查了很多国外的网站,只有几个帖子提到这个问题,即当子菜单不可见时,用GETSUBMENU得不到句柄(显然,可见时可以得到,我试过),要拦截消息INITMENU或INITPOPMENU查看WPRAPR参数,要用到控件的子类化,我不知道怎样处理。我的菜单是用编辑器加上的,VISIBLE选FALSE属性。我想实现一个很常见的功能,右击鼠标弹出彩旦,但窗口顶上的彩旦不能显示。////顺便说一句,国外的开发类网站要好的多,CSDN要努力啊。
      

  3.   


      //我想实现一个很常见的功能,右击鼠标弹出彩旦,但窗口顶上的彩旦不能显示。//不完整,我想用GetSubMenuCount 得到子彩旦的数目,该函数必须用到子彩旦句柄这个参数。
      

  4.   

    用GetMenuItemInfo能获得隐藏的菜单项么?
      

  5.   

    不行的啦,Visible=False表面上看起来这个菜单项是在的,其实在Windows看来菜单是没有Visible这种属性的。所以VB6是这样控制的:Visible=True就载入菜单,Visible=False就销毁它。既然不存在的,怎么去获得它的hMenu呢?
      

  6.   

    MENU是一个#32768类窗口,是窗口就有句柄HWND。
    但MENU的HWND是动态生成的,必须HOOK MESSAGE,然后才能SUBCLASS到WM_MENUINIT。
    解决办法:
    1、使用自己的菜单系统而非标准系统。
    2、使用专门的HOOK工具,可以到HTTP://PSCODE.COM/VB上搜索。
      

  7.   

    MENU是一个#32768类窗口,是窗口就有句柄HWND。
    ====================================================
    但为什么用myspy或spy++之类的工具只能找到form和其他控件的hwnd而没有菜单的hwnd???
    我用myspy等工具查看菜单位置,显示的是form的句柄
    如果是#32768、#32770类的窗口,用上述的工具应该也能找到。我以前试过。
      

  8.   

    哦,好像是真的有句柄,但不知怎么得到。
    正在问别人,如果有空到:
    http://www.533.net/cutebook/?act=view&userid=759&id=142249&page=1
    看看他有没有回复
      

  9.   

    (我晕噢,原来搞错了。楼主要的不是hMenu是hWnd啊……)
      

  10.   

    我想用GetSubMenuCount 得到子彩旦的数目,该函数必须用到子彩旦句柄即hMenu
      

  11.   

    http://dev.csdn.net/develop/article/28/28670.shtm
    或者直接发消息给卢培培(goodname008) 。。