回调程式:
Private Function WindowProc(ByVal Lwnd As Long, ByVal Lmsg As Long, ByVal Wparam As Long, ByVal Lparam As Long) As Long
    Select Case Lmsg
        Case WM_SETTEXT
            Debug.Print Wparam
        
    End Select
    WindowProc = CallWindowProc(LocalPrevWndProc, Lwnd, Lmsg, Wparam, Lparam)
End Function这段代码可以获取大多数Window(如窗体,按钮,列表框之类的文本被改变事件),
但不知为什么不能获取菜单的消息
如我改变菜单标题: mnuFile.Caption="文件菜单" ,以上回调未执行。
但是按钮的:Command1.Caption="test"却可以正确执行.请教大家:
1.获取菜单文本(Caption)被改变,复选(Checked)被改变,可用(Enabled)被改变时的Windows消息各是什么??
2.菜单是不是一种特别的窗体,我这个回调的Hook句柄设置的是Form1.Hwnd, 是不是要设置成Menu的句柄(我测试过,不行)

解决方案 »

  1.   

    Windows消息有很多,菜单应该是控件,我觉得应该有控件消息吧,我知识浅薄,有待于进一步提高,我也想知道菜单消息都有哪些?
      

  2.   


    看看这些消息对你有没有用处:(摘自 http://www.newasp.net/tech/program/20563.html)WM_INITMENU = $0116; 当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜单键,它允许程序在显示前更改菜单
    WM_INITMENUPOPUP  = $0117; 当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部
    WM_MENUSELECT = $011F; 当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)
    WM_MENUCHAR  = $0120; 当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者;
    WM_ENTERIDLE  = $0121; 当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待
    WM_MENURBUTTONUP  = $0122;
    WM_MENUDRAG  = $0123;
    WM_MENUGETOBJECT  = $0124;
    WM_UNINITMENUPOPUP  = $0125;
    WM_MENUCOMMAND  = $0126;
    WM_CHANGEUISTATE  = $0127;
    WM_UPDATEUISTATE  = $0128;
    WM_QUERYUISTATE = $0129;
      

  3.   

    看看这个吧,对你有帮助的。
    http://dev.csdn.net/article/34/34547.shtm
      

  4.   

    按照zzyong00 (阿勇)的意思,用spy++查看消息(之前竟没想到用这工具,汗一个先)。发现设置菜单的文本也好,Enabled,Visible也好,竟没有激发任何Windows消息。
    我的理解可能是这样,菜单的状态只在内存中改,不激发Windows消息,只有在打开(或弹出菜单)时才重画所有当前菜单列表项,并激发WM_INITMENU或WM_INITMENUPOPUP事件。