当我从VB6的上下文菜单中选择一个选项时,如何停止显示额外的上下文菜单?

时间:2011-08-24 22:17:18

标签: vb6 contextmenu subclassing ime componentone

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

  1. 突出显示其中一个单元格中的某些文字。
  2. 在单元格中单击鼠标右键,文本仍然突出显示。
  3. 选择一个上下文菜单选项。
  4. 请求的上下文菜单操作发生。
  5. 显示与here类似的另一个上下文菜单,其中包含“从右到左阅读顺序”,“打开IME”和“重新转换”等选项。
  6. 如何让第二个上下文菜单消失?到目前为止,我已经尝试了the Microsoft Knowledge Base describes没有运气的方法。我的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有更深入了解的人,请告诉我有关事件序列发生的更多详细信息,以及如何防止这些额外的上下文菜单出现?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

BeforeMouseDown事件中,如果用户右键单击,请尝试设置Cancel = True