Как остановить отображение дополнительного контекстного меню при выборе параметра в контекстном меню в VB6? - PullRequest
3 голосов
/ 25 августа 2011

Я поддерживаю приложение с формой VB6, которая содержит ComponentOne VSFlexGrid 7.0. У нас есть пользовательское контекстное меню, которое позволяет пользователям выполнять некоторые специализированные операции копирования и вставки. Недавно мы столкнулись со следующей проблемой:

  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, пожалуйста, дать мне более подробную информацию о том, какая последовательность событий происходит, и как предотвратить появление этого дополнительного контекстного меню?

Ответы [ 2 ]

2 голосов
/ 25 августа 2011

Вы должны обрабатывать WM_CONTEXTMENU, чтобы отобразить контекстное меню вместо WM_RBUTTONUP (так как это может быть вызвано не просто щелчком правой кнопкой мыши).

1 голос
/ 30 августа 2011

В BeforeMouseDown событие, попробуйте установить Cancel = True, если пользователь щелкнет правой кнопкой мыши.

...