2008-09-19 3 views
2

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

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 или подобное.

ответ

4

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

Попробуйте:

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

На этот раз:

  • Наведите указатель мыши на ту же кнопку
  • Нажмите кнопку левой мыши и удерживайте
  • Отпустите левую кнопку мыши
  • «нажмите кнопку» действие вы ожидаете, что это вызвано событием up!
+0

Да, это проблема использования left-down вместо щелчка. Обычно пользователь может отменить щелчок, удерживая нажатой кнопку мыши, перемещая указатель за пределы объекта. Здесь мне нужно точно определить щелчок, обнаружив левый и левый? Что за хлопот :( – yuku 2008-09-19 06:13:50

+1

Я думаю, что если вы пишете элемент управления, вам нужно быть готовым к управлению всеми деталями взаимодействия с пользователем. С этой точки зрения семейство событий wxWidget событий мыши имеет смысл. – 2008-09-19 23:46:52

2

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

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

Смежные вопросы