【问题标题】:Initialize window code Mac OS X初始化窗口代码 Mac OS X
【发布时间】:2010-12-06 17:45:41
【问题描述】:

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

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

我怎样才能用纯代码做到这一点?

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

我很想看到 Objective-C 和 C 代码。我的目标是完全不用打开界面生成器就可以做到:)

【问题讨论】:

    标签: c objective-c macos initialization window


    【解决方案1】:

    据我了解,通常使用 Cocoa 完成的方式有点不同。 [NeHe's OpenGL lessons] 在底部有指向示例 Xcode 项目的链接,您可以模仿其格式。

    【讨论】:

      【解决方案2】:

      这些框架实际上为您做了很多工作。在main.m 中对NSApplicationMain() 的简单调用会执行诸如启动主应用程序类(由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(而不是文本视图)粘贴到其中,然后离开。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        • 1970-01-01
        • 2012-10-21
        • 2015-03-15
        • 2011-07-31
        • 1970-01-01
        • 2020-10-22
        相关资源
        最近更新 更多