【问题标题】:wxOSX/Carbon: wxGLCanvas mouse offset in non-floating window classeswxOSX/Carbon:非浮动窗口类中的 wxGLCanvas 鼠标偏移
【发布时间】:2010-03-21 17:42:04
【问题描述】:

我主要在 Carbon 包中使用 wxWidgets 编写插件程序,该包是 在运行时加载。运行我的插件的主机应用程序 提供本机窗口句柄 (WindowRef),我可以使用它来添加我的自定义, 基于 wxWidgets 的 GUI 类。

在 wxWidgets 中使用原生窗口句柄 我必须编写一个 wxTopLevelWindow 包装类,它完成所有 WindowRef 封装。到目前为止,这工作得很好,但在某些情况下 如果窗口在wxGLCanvas 内出现垂直鼠标偏移 本机窗口句柄的类不是“kFloatingWindowClass”类型。 如果我显示一个信息面板 (wxPanel) 整个wxGlCanvas,如果用户隐藏信息面板,则鼠标偏移 没了。

现在我的问题:

  1. 对这种行为有“简单”的解释吗?
  2. 是否可以使用某些方法调用来模仿信息面板效果 不使用面板本身?我尝试了Update() 和的几种组合 Refresh() 调用所有涉及的组件,但到目前为止它们都没有工作。 即使使用wxSizer 也无济于事。

插件应用程序使用的窗口层次结构:

wxCustomTopLevelWindow(宿主应用程序提供的WindowRef) wxPanel(所有应用程序面板的父窗口) wxPanel(应用程序信息面板) wxPanel(应用程序主面板) wxPanel(opengl 主面板) wxGlCanvas(主要的opengl画布)

有什么想法吗?非常感谢任何帮助。

【问题讨论】:

    标签: opengl mouse wxwidgets macos-carbon wxglcanvas


    【解决方案1】:

    是坐标系不匹配吗?一些 Mac OS X API 使用左上角作为原点(正 y 向下),而另一些使用左下角(正 y 向上)。

    这似乎是断断续续的,因为屏幕垂直中心附近的误差很小;离中心越远,坐标就会显得非常不准确(实际上,它位于屏幕的另一侧)。

    如果我在整个 wxGlCanvas 上显示一个信息面板 (wxPanel),并且如果用户隐藏信息面板,那么鼠标偏移就消失了,我可以绕过这个问题。

    如果您在屏幕中间弹出这个面板并用鼠标关闭它,这可能是一个红鲱鱼。

    【讨论】:

    • 嗨,彼得,感谢您的回答。 wxGlCanvas 本身是在正确的位置绘制的,但是无论我在中心还是远离中心,鼠标总是有一个恒定的偏移量。坐标系不匹配可能是一个问题,但为了验证这一点,我已经深入调试了它。你熟悉 wxWidgets API 吗?
    • 它实际上比标题栏(22 像素)多一点(26-28 像素)。但我会测量确切的偏移量。
    • 菜单栏也是22像素;我就是这么想的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多