如何动态使用VB快捷键?

yulinlover yulinlover 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我有个功能需要实现VB.Form上的菜单的动态添加、修改、删除功能,现遇到以下一个问题一直未能克服,特来向大师们求教:
1、我已有的Form上的菜单是用VB自带的MenuEditor生成的,里面的有个别的菜单是有快捷键的,我子类化了此窗体。现在鼠标点击此菜单的时候,我都能感应到相应的消息(WM_COMMAND),可是我用快捷键去激活菜单,VBIDE里的代码能相应,但是我子类化的过程却收不到相应消息,请问是什么原因造成的呢?

Form菜单代码:(快捷键是:Ctrl+N)

Private Sub mnuFileOpen_Click()
'/* 快捷键及鼠标点击都能执行到
MsgBox "FormMenu Clicked!" & mnuFileOpen.Name
End Sub


子类化代码:(快捷键激活菜单时,下面过程捕捉不到,但是点击是可以捕捉到得)

Private Function ISubclass_WindowProc(ByVal Hwnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long, Optional bCancel As Boolean = False) As Long
Dim tWinMessage As MSG
Dim lMenuID As Long
Dim oMenuItem As MenuItem
Select Case iMsg
Case WM_COMMAND
If lParam = 0 Then
lMenuID = LOWORD(wParam)
Set oMenuItem = m_oMenuHelper.FindMenuItemByID(lMenuID)
If Not oMenuItem Is Nothing Then
MsgBox "MenuItem(" & oMenuItem.Name & ") Clicked!"
End If
End If
Case WM_SYSKEYUP, WM_KEYUP, WM_KEYDOWN, WM_SYSKEYDOWN
tWinMessage.Hwnd = Hwnd
tWinMessage.message = iMsg
tWinMessage.wParam = wParam
tWinMessage.lParam = lParam
tWinMessage.time = CLng(Now)
TranslateMessage tWinMessage
MsgBox "wParam:" & wParam & ",lParam:" & lParam
Case Else

End Select
End Function


是不是因为我捕捉的消息不对,VB的MenuEditor编辑出来的快捷键再按得时候会触发什么消息呢?
...全文
评论 15
收藏 已收藏
分享
返回顶部
yulinlover
API 1,488 成员 23,270 内容