wxWidgets: обнаружение события нажатия на пользовательских элементах управления - PullRequest
2 голосов
/ 19 сентября 2008

Как добавить прослушиватель событий клика в свой пользовательский элемент управления, созданный с помощью 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 или подобного.

Ответы [ 2 ]

4 голосов
/ 19 сентября 2008

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

Попробуйте:

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

На этот раз:

  • Наведите курсор на ту же кнопку
  • Нажмите удерживайте левую кнопку мыши и удерживайте
  • Отпустить левую кнопку мыши
  • Ожидаемое вами действие «щелкнуть» запускается событием up!
2 голосов
/ 19 сентября 2008

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

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

...