Glut 窗口 - MAC OSX 中的菜单栏
Posted
技术标签:
【中文标题】Glut 窗口 - MAC OSX 中的菜单栏【英文标题】:Glut window - menu bar in MAC OSX 【发布时间】:2011-07-14 08:56:44 【问题描述】:当使用 glut (glutCreateWindow( "title" );) 创建窗口时,有没有办法删除 MAC OSX 中的菜单栏项?
或者是否有任何其他替代方法可以使用 C/C++ 和 glut 在 OSX 中为 OpenGL 创建(无菜单)窗口?
【问题讨论】:
你在说什么菜单栏? MacOSX 的顶部菜单 - 文件、编辑、窗口 您想完全删除/隐藏菜单栏吗?还是您要选择性地删除某些项目? Glut 与菜单栏无关。但我很好奇,为什么会有人想要这个。 我想删除所有可能的菜单栏项目,并有一个不可调整大小的窗口 【参考方案1】:glut 正在 Mac OSX 上创建菜单栏项目甚至键盘快捷键(只需尝试 Command+S,您会感到惊讶......)。如果不访问 Cocoa,就没有简单的方法可以删除这些东西。 这里的 GLUT 源代码显示了所有这些东西的实现位置:
http://developer.apple.com/library/mac/#samplecode/glut/Introduction/Intro.html
为了摆脱 GLUT 中的菜单,您必须执行以下操作:
-
#include "Cocoa/Cocoa.h" 在您的 main.cpp 文件中。
右键单击您的 main.cpp 文件,选择“获取信息”,然后在“常规”选项卡中将“文件类型”设置为 sourcecode.cpp.objcpp
在您的 xcode 项目中包含 Cocoa 框架
在 glutInit() 之后添加以下代码:
if (NSApp)
NSMenu *menu;
NSMenuItem *menuItem;
[NSApp setMainMenu:[[NSMenu alloc] init]];
menu = [[NSMenu alloc] initWithTitle:@""];
[menu addItemWithTitle:@"About..." action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
menuItem = [[NSMenuItem alloc] initWithTitle:@"Apple" action:nil keyEquivalent:@""];
[menuItem setSubmenu:menu];
[[NSApp mainMenu] addItem:menuItem];
[NSApp setAppleMenu:menu];
代码由 Tom de Grunt 提供:http://www.degrunt.net/2010/09/22/using-nsmenu-outside-the-nib/
这将设置您的应用程序,在带有您的应用程序名称的菜单中只有一个“关于...”按钮。只是删除菜单会导致崩溃,因为 GLUT 需要一个菜单并为此注册了回调。
我已经在网上上下搜索了这个问题的答案,希望这能帮助遇到同样问题的其他人。
【讨论】:
非常感谢!我仍在使用 GLUT 提交 Mac App Store,看来他们对菜单很挑剔。我需要删除打印和保存菜单项,因为我的游戏不使用它们。我想删除文件、编辑和 Windows 菜单,因为它们什么都不做,我该怎么做?我想保留默认的应用程序菜单,因为它包含 GLUT 首选项的链接,Apple 需要 Cmd+Q 快捷方式。【参考方案2】:Glut 与菜单栏无关。您可以做的是使用 glutFullscreen() 将应用程序置于全屏状态,然后在 Glut 窗口中定义多个视口来模拟您自己的窗口。
【讨论】:
以上是关于Glut 窗口 - MAC OSX 中的菜单栏的主要内容,如果未能解决你的问题,请参考以下文章
非级联类型的菜单栏项目在 Mac OSX 的 Tkinter 上不起作用
使用情节提要的 Xcode 6.1 OSX 应用程序不呈现窗口或菜单栏