首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wndProc窗口的RichEdit20WPT消息有什么特别之处吗?

wndProc窗口的RichEdit20WPT消息有什么特别之处吗?
EN

Stack Overflow用户
提问于 2016-12-08 12:51:24
回答 1查看 388关注 0票数 0

我目前正在尝试子类编辑控件,特别是Outlook客户端的en电子邮件主题。此控件属于RichEdit20WPT类。

我使用以下WINAPI方法获得一个wndProc。

代码语言:javascript
复制
<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;

代码语言:javascript
复制
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窗口。这是正确的吗?注意,我没有制作我自己的上下文菜单,我是附加到现有的一个,所以我不改变所有者的上下文菜单或类似的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-11 12:32:26

谢谢所有的评论,这帮助我至少继续寻找答案或在本例中的信息。对于任何来这里想要添加到Outlook菜单的上下文菜单的人。

首先,这里有两个很好的链接,它们大致解释了该做什么。任何阅读它们的如何在Windows编辑控件上下文菜单中禁用复制/粘贴命令? 修改标准控件中的右键上下文菜单。都可以为标准编辑控件(如windows窗体应用程序上的文本框)假定消息将被发送。

对于Outlook (至少2007 /2010年),这是我所发现的;

  1. 您需要为资源管理器和检查器查找的文本框是RichEdit20WPT
  2. 但是,此窗口没有获得所需的两条关键消息。(a)在显示上下文菜单之前,它不会让WM_INITMENUPOPUP知道;第二,当您在上下文菜单中选择一个WM_COMMAND时,它不会收到消息。
  3. 为了修改上下文菜单,您需要子类subject文本框的父类,它是类#32770的窗口。
  4. 当父类被子类化时,有一些挑战。要知道目标文本框(如从#32770窗口右键单击)的时间,您需要查找WM_SETCURSOR。

类似这样的东西,wParam将是文本框的Hwnd,而HiWord将是鼠标消息;

代码语言:javascript
复制
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

然后不久之后就会有这样的消息

代码语言:javascript
复制
Case NativeMethodsEX.WM_INITMENUPOPUP
    If rightClickOnSubject Then
        'check here if you want to display something.
    End If

一旦你知道了这一点,你就可以实现从其他论坛答案的想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41039964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档