wxвиджеты:Обнаружение события щелчка на пользовательских элементах управления

StackOverflow https://stackoverflow.com/questions/98941

  •  01-07-2019
  •  | 
  •  

Вопрос

Как добавить прослушиватель событий щелчка в мой пользовательский элемент управления, созданный с помощью wxWidgets?Пользовательский элемент управления использует wxWindow в качестве основы.В списке событий я вижу

wxEVT_LEFT_DOWN 
wxEVT_LEFT_UP 
wxEVT_LEFT_DCLICK
wxEVT_MIDDLE_DOWN
wxEVT_MIDDLE_UP 
wxEVT_MIDDLE_DCLICK
wxEVT_RIGHT_DOWN 
wxEVT_RIGHT_UP
wxEVT_RIGHT_DCLICK
wxEVT_MOTION
wxEVT_ENTER_WINDOW
wxEVT_LEAVE_WINDOW
wxEVT_MOUSEWHEEL 

Но нет wxEVT_LEFT_CLICK или похожие.

Это было полезно?

Решение

Обычно событие «щелчок» отсутствует (а в случае wxWidgets - нет).Действие щелчка разбито на две части:Мышь вниз и мышь вверх.Обычно то, что вы считаете событием «щелчок левой кнопкой мыши», на самом деле обрабатывается как событие «левый вверх».

Попробуйте:

  • Наведите указатель мыши на кнопку (например, кнопку «Добавить комментарий» на этой странице)
  • Нажмите левую кнопку мыши вниз и удерживайте
  • Отведите указатель мыши от кнопки, удерживая ее нажатой.
  • Отпустите левую кнопку мыши
  • Ничего не произошло!

На этот раз:

  • Наведите курсор на ту же кнопку
  • Нажмите кнопку левой мыши и удерживайте
  • Отпустите левую кнопку мыши
  • Ожидаемое вами действие «щелчок» инициируется событием up!

Другие советы

В первую очередь я рекомендую наследовать от wxControl, а не от wxWindow, wxControl предназначен именно для этой цели, и у вас меньше шансов столкнуться с проблемой борьбы с системой.Когда я смотрю на элемент управления, который создаю в своем собственном приложении wxWidgets, я вижу, что мой обработчик кликов прикреплен к wxEVT_LEFT_DOWN.Просматривая свою копию книги «Кроссплатформенное программирование графического интерфейса пользователя с помощью wxWidgets», я вижу список всех событий wxMouseEvents, но wxEVT_LEFT_CLICK отсутствует.Я бы посоветовал использовать событие wxEVT_LEFT_DOWN.

Теперь, после публикации, я прочитал ответ Берли и согласен с ним: wxWidgets предлагает события самого низкого уровня, и это дает вам максимальный контроль над пользовательским интерфейсом, который вы создаете для своих пользователей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top