初始化窗口代码Mac OS X

初始化窗口代码Mac OS X,c,objective-c,macos,initialization,window,C,Objective C,Macos,Initialization,Window,我目前正在阅读“红皮书”以正确学习OpenGL,在第一个示例中,作者写了一行“InitializeAWindowPlease();”作为代码的占位符,该代码将创建一个窗口来绘制OpenGL内容 由于我使用的是我的编程,我知道我自动“获得”了一个窗口(并且我必须在interfacebuilder中创建自己的OpenGL视图) 我如何用纯代码来实现这一点 我正在努力学习编程,我不喜欢总是走“捷径”。 如何制作一个窗口来绘制openGL的内容 有了Objective-C和C代码,我很想看到它。我的目标

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

由于我使用的是我的编程,我知道我自动“获得”了一个窗口(并且我必须在interfacebuilder中创建自己的OpenGL视图)

我如何用纯代码来实现这一点

我正在努力学习编程,我不喜欢总是走“捷径”。 如何制作一个窗口来绘制openGL的内容


有了Objective-C和C代码,我很想看到它。我的目标是不用打开interface builder就可以实现:)

据我所知,使用Cocoa通常的方式有些不同<代码>[NeHe的OpenGL课程]底部有指向示例Xcode项目的链接,您可以模仿其格式。

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

理解封面下的“魔力”是件好事,但我认为让框架为您做大量繁重的工作没有什么错。IB是一个特别好的UI编辑器,如果不使用它,那将是一个耻辱!不管怎样,既然你问

您应该阅读苹果开发者连接网站上的以下文档:

因此,要以编程方式完成所有这些工作,至少需要执行以下代码。请注意,这是一个粗略的开始,不会创建应用程序委托,也不会向菜单添加任何内容。这是留给读者的练习!但是下面的代码基本上按照您描述的方式工作,而不使用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;
}
//main.m
//
//noibap-创建没有IB的应用程序
//
//加文·贝克于2010年1月23日创作。
//
#进口
int main(int argc,char*argv[])
{
//自动释放池
NSAutoreleasePool*池=[[NSAutoreleasePool alloc]init];
//创建共享应用程序实例
[NSApplication sharedApplication];
//主窗口
NSUInteger windowStyle=NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask;
NSRect windowRect=NSMakeRect(100100400400);
NSWindow*window=[[NSWindow alloc]initWithContentRect:windowRect
样式掩码:WindowsStyle
backing:NSBackingStoreBuffered
延期:否];
//测试内容
NSTextView*textView=[[NSTextView alloc]initWithFrame:windowRect];
[窗口设置内容视图:文本视图];
//窗口控制器
NSWindowController*windowController=[[NSWindowController alloc]initWithWindow:window];
//@todo创建应用程序委托
//@todo创建菜单(特别是退出!)
//显示窗口并运行事件循环
[窗口命令];
[NSApp运行];
返回0;
}
这不是一个完整的解决方案,但它应该能让你在大部分的道路上达到目的。因此,您可以将OpenGL视图作为
contentView
(而不是文本视图)插入,然后离开