wxOSX/Carbon: смещение мыши wxGLCanvas в классах с плавающим окном

Я в основном программирую плагины, используя wxWidgets в комплекте Carbon, который загружается во время выполнения. Хост-приложения, в которых запущены мои плагины, предоставляют дескриптор собственного окна (WindowRef), который я могу использовать для добавления своих пользовательских GUI-классов на основе wxWidgets.

Чтобы использовать собственный дескриптор окна с классами wxWidgets, мне пришлось написать wxTopLevelWindow класс-обертка, который делает всеWindowRef инкапсуляция. Пока это работает довольно хорошо, но при некоторых обстоятельствах я получил вертикальные смещения мыши в пределах wxGLCanvas если класс окна родного дескриптора окна не относится к типу "kFloatingWindowClassMsgstr "Я могу обойти проблему, если отобразить информационную панель (wxPanel) в целом wxGlCanvas и если пользователь скрывает информационную панель, то смещение мыши исчезает.

Теперь мои вопросы:

  1. Есть ли "простое" объяснение этому поведению?
  2. Можно ли использовать определенные вызовы методов для имитации эффекта информационной панели, не используя саму панель? Я попробовал несколько комбинаций Update() а такжеRefresh() вызовы всех задействованных компонентов, но пока ни один из них не работал. Даже использование wxSizer не мог помочь здесь

Иерархия окон, используемая плагинами-приложениями:

wxCustomTopLevelWindow (WindowRef предоставляется хост-приложением)
 wxPanel (родительское окно для всей панели приложения)
  wxPanel (панель информации о приложении)
  wxPanel (главная панель приложения)
   wxPanel (основная панель opengl)
    wxGlCanvas (основной холст opengl)

Есть идеи? Любая помощь очень ценится.

1 ответ

Это несоответствие системы координат? Некоторые API для Mac OS X используют верхний левый угол в качестве источника (положительный у понижается), в то время как другие используют нижний левый (положительный у повышается).

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

Я могу обойти проблему, если я отображаю информационную панель (wxPanel) в целом wxGlCanvas и если пользователь скрывает информационную панель, то смещение мыши исчезает.

Это может быть красная сельдь, если вы открываете эту панель в середине экрана и закрываете ее мышью.

Другие вопросы по тегам