我目前正在尝试子类编辑控件,特别是Outlook客户端的en电子邮件主题。此控件属于RichEdit20WPT类。
我使用以下WINAPI方法获得一个wndProc。
<DllImport("ComCtl32.dll", CharSet:=CharSet.Auto)> _
Public Shared Function SetWindowSubclass(hWnd As IntPtr, newProc As Win32SubClassProc, uIdSubclass As IntPtr, dwRefData As IntPtr) As Integer
End Function
<DllImport("comctl32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Public Shared Function DefSubclassProc(ByVal hWnd As IntPtr, ByVal uMsg As IntPtr, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
End Function
Public Delegate Function Win32SubClassProc(hWnd As IntPtr, Msg As IntPtr, wParam As IntPtr, lParam As IntPtr, uIdSubclass As IntPtr, dwRefData As IntPtr) As Integer然后有一个像这样的wndProc;
Private WM_CONTEXTMENU As IntPtr = &H7B
Private Function SubClassProc(hWnd As IntPtr, Msg As IntPtr, wParam As IntPtr, lParam As IntPtr, uIdSubclass As IntPtr, dwRefData As IntPtr) As Integer
Select Case Msg
Case WM_DESTROY
Case WM_NCDESTROY
Case WM_LBUTTONDOWN
Case WM_CONTEXTMENU 'NEVER HAPPENS
Case WM_RBUTTONDOWN
End Select
Return DefSubclassProc(hWnd, Msg, wParam, lParam)
End Function我得到的L和R按钮下降和向上的消息,但没有WM_CONTEXTMENU。我目前的目的是向上下文菜单中添加一个菜单项,因此作为我使用WM_RBUTTONDOWN消息的另一种选择。
此控件是否特殊且已知不显示WM_CONTEXTMENU消息?
我还面临一个挑战,即在选择上下文菜单中的内容之后,如何查找发生的消息。我的理解是,在上下文菜单中单击的菜单项的消息被给予父菜单,在本例中是这个RichEdit20WPT窗口。这是正确的吗?注意,我没有制作我自己的上下文菜单,我是附加到现有的一个,所以我不改变所有者的上下文菜单或类似的东西。
发布于 2016-12-11 12:32:26
谢谢所有的评论,这帮助我至少继续寻找答案或在本例中的信息。对于任何来这里想要添加到Outlook菜单的上下文菜单的人。
首先,这里有两个很好的链接,它们大致解释了该做什么。任何阅读它们的如何在Windows编辑控件上下文菜单中禁用复制/粘贴命令? 修改标准控件中的右键上下文菜单。都可以为标准编辑控件(如windows窗体应用程序上的文本框)假定消息将被发送。
对于Outlook (至少2007 /2010年),这是我所发现的;
类似这样的东西,wParam将是文本框的Hwnd,而HiWord将是鼠标消息;
Case NativeMethodsEX.WM_SETCURSOR
If wParam = subjectHwnd Then
Dim pMap As New NativeMethodsEX.LParamMap(lParam)
If pMap.hiword = NativeMethodsEX.WM_RBUTTONUP Then
rightClickOnSubject = True
Else
rightClickOnSubject = False
End If
End If然后不久之后就会有这样的消息
Case NativeMethodsEX.WM_INITMENUPOPUP
If rightClickOnSubject Then
'check here if you want to display something.
End If一旦你知道了这一点,你就可以实现从其他论坛答案的想法。
https://stackoverflow.com/questions/41039964
复制相似问题