Как сделать так, чтобы элементы управления wxWidgets принимали щелчки средней кнопкой?

У меня есть сценарий, в котором я хотел бы, чтобы некоторые элементы управления wxWidgets реагировали на щелчки средней кнопкой мыши, ведя себя точно так же, как обычно для левого щелчка, за исключением того, что я должен быть в состоянии сказать, что это средний щелчок и делать что-то другое в моем приложении.

В частности, я работаю с кнопками и ползунками и хочу, чтобы кнопки были нажимаемыми, а ползунок — перетаскиваемым с помощью средней кнопки. Я нахожусь в Windows (и это единственная платформа, о которой я забочусь), на случай, если что-то изменится.

После того, как я немного просмотрел документацию wx, я не нашел способа установить, какие кнопки мыши прослушивает элемент управления. Итак, моей первой идеей было написать обработчик событий, который захватывает события средней кнопки, транслирует их в соответствующие события левой кнопки и говорит wx обработать их:

void OnMouseEvent(wxMouseEvent & wxevent)
{
wxMouseEvent wxeventTranslated = wxevent;

if (wxevent.MiddleDown())
{
wxeventTranslated.SetEventType(wxEVT_LEFT_DOWN);
}
else if (wxevent.MiddleUp())
{
wxeventTranslated.SetEventType(wxEVT_LEFT_UP);
}
else
{
return;
}

m_pWxbutton->ProcessWindowEvent(wxeventTranslated);
}

(Вот m_pWxbutton это wxButton где события зарегистрированы). Это не сработало: вызывается обработчик событий мыши, но я никогда не получаю wxEVT_COMMAND_BUTTON_CLICKED событие, и при этом кнопка не переходит в «нажатое» визуальное состояние в графическом интерфейсе. Я также попробовал версию, где я изменил тип события в переданном событии, а затем вызвал Skip(), но это имело тот же результат.

По общему признанию для кнопок было бы легко просто определить щелчок самостоятельно, но я надеюсь, что это будет работать и для ползунков, и я не получаю удовольствие от повторной реализации всей логики мыши для них. 🙂

Как я могу перевести события мыши и заставить их вести себя как родные события GUI? Или я должен попробовать совершенно другой подход?

0

Решение

Вы не можете изменить поведение стандартных элементов управления, как это — вот почему они стандарт. Конечно, вы можете использовать пользовательские элементы управления, подобные кнопкам, которые управляют мышью любым способом, но нет переносимого способа изменить стандартные элементы управления, чтобы делать то, что вы хотите, в лучшем случае вы можете использовать специфичный для платформы код и на некоторых платформах это может быть совершенно невозможно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]