【问题标题】:Creating a control IN FRONT of an OpenGL view在 OpenGL 视图的前面创建控件
【发布时间】:2012-02-29 18:03:55
【问题描述】:

我在 Mac 上有一个 OpenGL 视图。我想在它前面放一个NSTextField,但是即使我把它放在前面,它也被视图遮挡了。

有一个非常简单的测试用例。在 XCode 中创建一个新项目(我使用的是 4.0.2)和一个窗口。添加 OpenGL 视图。现在添加一个文本字段并将其设置为使其一半与 OpenGL 视图重叠。运行程序。显示整个字段,但是当您键入文本时,无论您如何从前到后排列字段,都只显示一半。

【问题讨论】:

    标签: macos opengl nstextfield


    【解决方案1】:

    NSOpenGLView 实际上并不在窗口内绘制,它在窗口上方或下方的表面中绘制,默认情况下在上方。如果你想在 OpenGL 表面前面有一个控件,你必须使表面低于窗口,使用NSOpenGLContext 参数NSOpenGLCPSurfaceOrder。但是你必须在窗口中剪切一个透明矩形才能看到 OpenGL 表面。

    编辑添加:或者,您可以在 OpenGL 表面和主窗口上方创建一个透明覆盖或子窗口,并将控件放在那里。不知道哪种方式会更容易。

    【讨论】:

    • 我采纳了您的建议并尝试了其他一些方法。我将 NSOpenGLCPSurfaceOrder 参数更改为 -1,现在我可以看到该字段,但看不到 OpenGL 图像。我将窗口更改为透明,但 OpenGL 字段仍然是白色的。我不确定如何使 OpenGL 视图变白——我在 NSView 中没有看到任何调用来执行此操作。
    • 我创建了一个新窗口,其中包含一个 NSTextField,并使上面窗口的背景透明(稍后会详细介绍)。这种方法有效,但它使鼠标点击变得有趣,因为我必须在一个窗口中捕捉它们,然后将它们传递到下一个窗口。 Apple 的代码显示了如何做到这一点,但“FunkyOverlayWindow”项目依赖于 OS X 10.7,我需要它才能在 OS 10.5 上运行。我会进一步研究,看看是否有我可以提取的代码来实现这一点。
    • 顺便说一下,使窗口背景透明的代码是 NSColor *backgroundColor = [NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:0.0]; [_overlayWindow setBackgroundColor:backgroundColor]; [_overlayWindow setAlphaValue:.9999];请注意,“setAlphaValue”值必须是 0.9999。如果是 1.0,那么你有一个黑色的窗口。去图吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多