初始化窗口代码Mac OS X.

时间:2009-10-14 15:58:14

标签: c objective-c macos initialization window

我正在阅读正确学习OpenGL的“红皮书”,在第一个例子中,作者写了一行“InitializeAWindowPlease();”作为代码的占位符,它将创建一个窗口来绘制OpenGL内容。

由于我正在使用Xcode进行编程,我知道我“得到”了一个自动使用的窗口(我必须在interfacebuilder中创建自己的OpenGL视图)。

如何使用纯代码实现此目的?

我正在努力学习编程,而且我并不乐意一直采用“快捷方式”。 如何创建一个窗口来绘制我的openGL内容?

使用Objective-C和C代码我很乐意看到它。我的目标是,我可以在不打开界面构建器的情况下完成它。

2 个答案:

答案 0 :(得分:1)

框架实际上为您做了大量工作。在您的NSApplicationMain()中对main.m的简单调用可以执行以下操作:启动主应用程序类(由Info.plist确定),加载主nib,加载主窗口和菜单,设置默认的内存自动释放池,并进入运行循环(以及更多!)。

理解封面下的“魔法”是很好的,但我认为让框架为你做了很多繁重的工作并没有错。 IB是一个特别好的UI编辑器,如果不使用它将是一种耻辱!无论如何,既然你问过......

您应该阅读Apple开发人员连接网站上的以下文档:

因此,至少要以编程方式完成所有这些操作,您需要执行类似以下代码的操作。请注意,这是一个粗略的开始,并不会创建应用程序委托,也不会向菜单添加任何内容。这是留给读者的练习!但是下面的代码基本上以您描述的方式工作,而不使用IB。

//  main.m
//
//  NoIBApp - Create Application without IB
//
//  Created by Gavin Baker on 23/01/10.
//

#import <Cocoa/Cocoa.h>

int main(int argc, char *argv[])
{
    // Autorelease Pool

    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    // Create shared app instance

    [NSApplication sharedApplication];

    // Main window

    NSUInteger windowStyle = NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask;

    NSRect windowRect = NSMakeRect(100, 100, 400, 400);

    NSWindow* window = [[NSWindow alloc] initWithContentRect:windowRect
                                                   styleMask:windowStyle
                                                     backing:NSBackingStoreBuffered
                                                       defer:NO];

    // Test content

    NSTextView* textView = [[NSTextView alloc] initWithFrame:windowRect];
    [window setContentView:textView];

    // Window controller

    NSWindowController* windowController = [[NSWindowController alloc] initWithWindow:window];

    // @todo Create app delegate

    // @todo Create menus (especially Quit!)

    // Show window and run event loop

    [window orderFrontRegardless];
    [NSApp run];

    return 0;
}

这不是一个完整的解决方案,但它应该可以帮助你完成大部分工作。因此,您可以将您的OpenGL视图添加到contentView(而不是文本视图),然后就可以了。

答案 1 :(得分:0)

根据我的理解,通常使用Cocoa的方式有点不同。 [NeHe's OpenGL lessons]链接到底部的示例Xcode项目,您可以将其格式化为。