gpt4 book ai didi

c - 初始化窗口代码 Mac OS X

转载 作者:太空宇宙 更新时间:2023-11-03 23:57:27 24 4
gpt4 key购买 nike

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

因为我正在使用 Xcode对于我的编程,我知道我“获得”了一个自动使用的窗口(并且我必须在 interfacebuilder 中制作我自己的 OpenGL View )。

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

我正在努力学习编程,但我不喜欢总是走“捷径”。我怎样才能制作一个窗口来绘制我的 openGL 东西?

对于 Objective-C 和 C 代码,我很乐意看到它。我的目标是我可以在完全不打开界面生成器的情况下实现它:)

最佳答案

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

了解幕后发生的“魔法”是件好事,但我认为让框架为您完成大量繁重的工作没有任何问题。而且IB是一个特别好用的UI编辑器,不用它太可惜了!不管怎样,既然你问了……

您应该从 Apple 的 Developer Connection 站点阅读以下文档:

因此,至少,要以编程方式完成所有这些操作,您需要执行类似于以下代码的操作。请注意,这是一个粗略的开始,不会创建应用程序委托(delegate),也不会向菜单添加任何内容。这是留给读者的练习!但是下面的代码基本上按照您描述的方式工作,没有使用 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 View 作为 contentView(而不是 TextView )粘贴进去。

关于c - 初始化窗口代码 Mac OS X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1567281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com