3

我正在维护一个包含 ComponentOne VSFlexGrid 7.0 的 VB6 表单的应用程序。我们有一个自定义上下文菜单,允许用户执行一些专门的复制和粘贴操作。最近,我们遇到了以下问题:

  1. 突出显示其中一个单元格中的一些文本。
  2. 右键单击单元格,文本仍然突出显示。
  3. 选择上下文菜单选项之一。
  4. 发生请求的上下文菜单操作。
  5. 将显示另一个与此处所示类似的上下文菜单,其中包含“从右到左的阅读顺序”、“打开 IME”和“重新转换”等选项。

如何使第二个上下文菜单消失?到目前为止,我已经尝试过Microsoft 知识库描述的方法,但没有成功。我的 WindowProc 函数如下:

Function WindowProc(ByVal hw As Long, _
                    ByVal uMsg As Long, _
                    ByVal wParam As Long, _
                    ByVal lParam As Long) As Long

    Select Case uMsg
        Case WM_RBUTTONUP
            frmMain.PopupMenu frmMain.mnuPopUp
        Case Else
            WindowProc = CallWindowProc(lpPrevWndProc, hw, _
                                       uMsg, wParam, lParam)
    End Select
End Function

复制操作发生后,我看到的 uMsg 值为 15(WM_PAINT)和 32(WM_SETCURSOR)。我还注意到,当我没有在单元格中突出显示文本时会触发表单级 MouseUp 事件,但是当我在单元格中突出显示文本时它不会触发。

对 VB6 和/或 ComponentOne 有更深入了解的人可以给我更多关于发生的事件序列的详细信息,以及如何让这个额外的上下文菜单不显示?

4

2 回答 2

2

您应该处理WM_CONTEXTMENU显示上下文菜单而不是WM_RBUTTONUP(因为它不仅仅是可以触发它的右键单击)。

于 2011-08-25T06:15:04.610 回答
1

如果用户右键单击,则BeforeMouseDown尝试设置。Cancel = True

于 2011-08-30T19:23:26.217 回答