Как прокрутить родительское окно wxScrollWindow изнутри дочернего окна wxScrollWindow в wxWidgets

#c #scroll #scrollbar #wxwidgets

Вопрос:

Привет, я использую wxScrollWindow и у меня 2 окна wxscrollwindow. Оба они работают правильно по отдельности.

  1. Первое окно wxScrolledWindow прокручивается горизонтально, а второе окно прокрутки прокручивается вертикально.
  2. В первом окне wxScrolledWindow встроено второе окно прокрутки. Скриншот для иллюстрации прилагается ниже.

Проблема в том, что, когда я нахожусь во втором прокручиваемом окне(по вертикали), я не могу прокручивать по горизонтали. На скриншоте второе окно прокрутки содержит кнопки в диапазоне от кнопки 1 до кнопки 20, скажем. Таким образом, я могу прокручивать эти кнопки по вертикали. Аналогично, первое прокручиваемое окно имеет множество панелей WX, которые можно прокручивать по горизонтали. Проблема возникает, когда я пытаюсь прокрутить по горизонтали, когда курсор находится поверх любой из кнопок. Поэтому, чтобы прокрутить по горизонтали, я должен сначала переместить курсор на любую из меток(показано на скриншоте как label1 до label5), а затем начать горизонтальную прокрутку. Как я могу также включить горизонтальную прокрутку, когда курсор находится поверх любой из кнопок. Я подумываю о передаче дочернего события прокрутки родительскому(первому) окну прокрутки с помощью event.Skip (), но я не знаю наверняка, как это будет работать. Кнопки, показанные на скриншоте, находятся внутри окна wxscrolled, которое прокручивается только вертикально. Поэтому, когда пользователь пытается прокрутить кнопки по горизонтали, они перемещаются не так, как ожидалось. Но я хочу, чтобы родительское окно прокрутки перемещалось(прокручивалось), когда пользователь пытается прокручивать кнопки горизонтально.

Иллюстрация

Комментарии:

1. SetTargetWindow прокрутит другое окно.

2. Может быть, вы хотите использовать wxGrid

3. Возможно, прокручиваемое окно теряет фокус, и кнопка фокусируется, когда вы наводите на нее курсор мыши. Я не уверен, как бы вы это исправили.

Ответ №1:

Я решил эту проблему, написав свой собственный класс событий, производный от wxEvent, и теперь все работает так, как ожидалось. То есть я могу управлять прокруткой родительского окна прокрутки(по горизонтали) из дочернего окна прокрутки(по вертикали).