Private Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As MSG, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long) As Long Private Type POINTAPI x As Long y As Long End Type Private Type MSG hwnd As Long message As Long wParam As Long lParam As Long time As Long pt As POINTAPI End Type Const WM_INITMENUPOPUP As Long = 117&Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long Dim a_msg As MSG Dim a As LongPrivate Sub Command1_Click() Timer1.Interval = 500 Timer1.Enabled = Not Timer1.Enabled End SubPrivate Sub Timer1_Timer() DoEvents Dim hm As Long hm = GetMenu(Me.hwnd)
Debug.Print hm
a_msg.hwnd = hm a_msg.message = WM_INITMENUPOPUP
a = GetMessage(a_msg, Me.hwnd, 0, 0)
Debug.Print a End Sub不行呀... 我对API完全不了解...好心的大侠帮我改下... 谢谢!!
menu.enable--->致能与否
menu.?? --->是否还"开着"(还能看到)我来自台湾,电脑用语或有不同,还请包涵...
谢谢各位的指点~
要实现确定菜单是否激活,应该用Windows消息。
WM_ENTERMENULOOP,进入菜单消息循环(即菜单显示出来)
WM_EXITMENULOOP,退出菜单消息循环
另外,在菜单将要显示之前(还没看得见,但是正在内部作初始化),还有两个消息:
WM_INITMENUPOPUP,将要显示弹出菜单
WM_INITMENU,将要显示主菜单原帖:
http://topic.csdn.net/u/20081211/08/58f1770d-6a70-4715-b625-724826693503.html
就如同12和13楼说的,用子类处监视那几个消息即可。
注意要先获得菜单句柄,这个用GetMenu和GetSubMenu函数。
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type MSG
hwnd As Long
message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type
Const WM_INITMENUPOPUP As Long = 117&Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Dim a_msg As MSG
Dim a As LongPrivate Sub Command1_Click()
Timer1.Interval = 500
Timer1.Enabled = Not Timer1.Enabled
End SubPrivate Sub Timer1_Timer()
DoEvents
Dim hm As Long
hm = GetMenu(Me.hwnd)
Debug.Print hm
a_msg.hwnd = hm
a_msg.message = WM_INITMENUPOPUP
a = GetMessage(a_msg, Me.hwnd, 0, 0)
Debug.Print a
End Sub不行呀... 我对API完全不了解...好心的大侠帮我改下... 谢谢!!