问题在于,通过对谷歌和堆栈溢出的研究,我没有找到这样做所需的元素
Carbon 是一个旧框架,旨在帮助开发人员从经典 MacOS(即 9.x 及更低版本)过渡到 MacOS X。正如 Algirdas Preidžius 在评论中指出的那样,HIToolbox.framework,这是 Carbon 的一部分,您可以'd 用来创建窗口之类的,是deprecated in MacOS X 10.7。现在尝试使用这些框架毫无意义。
撇开这些不谈,您的示例说明了对具有图形用户界面的程序的基本要求的误解。这是你的代码:
int main() {
carbon::Window win1 = carbon::openWindow(10,10,640,480);
win1.setVisible(true);
return 0;
}
即使 Carbon API 恰好与您在此处所拥有的相匹配(甚至不接近),您的程序也似乎什么都不做。它会创建一个窗口并可能显示它,但随后它会立即退出,因此该窗口可能根本不会出现在屏幕上,或者可能会在屏幕上闪烁并消失得如此之快,以至于您可能看不到它。具有图形界面的程序几乎将所有时间都花在等待用户做某事上,例如移动鼠标或按下鼠标按钮或按下键盘上的键或插入软盘(请记住,我们在这里谈论的是老派)。为了实现这一点,任何 GUI 应用程序的核心都是 事件循环。在它甚至被称为“MacOS”之前的早期,Macintosh 操作系统一次只能运行一个程序,并且该程序必须轮询操作系统以获取每个新事件,因此应用程序的核心看起来像这样:
EventRecord theEvent;
EventMask eventMask = everyEvent;
while (!quitting) {
GetNextEvent(eventMask, &eventRecord);
switch (eventRecord.what) {
case keyDown: {
// do something with the key in the event
}
case keyUp: {
// do something with the key in the event
}
case autoKey: {
// do something with the key in the event
}
case mouseDown: {
// do something with the mouse position in the event
}
case mouseUp: {
// do something with the mouse position in the event
}
// ...and so on...
}
}
那是事件循环。在以后的版本中,操作系统更改为允许同时运行多个应用程序,因此事件循环基于一个名为 WaitNextEvent() 而不是 GetNextEvent() 的函数,主要区别在于如果没有可用事件,WNE 将阻塞.当 Carbon 出现时,风格再次改变——这次事件循环由操作系统处理,程序只需为他们感兴趣的所有事件注册回调函数(这几乎是 Microsoft Windows 应用程序的工作方式) ,并且这些处理程序会在需要时被调用。
所有这些实际上只是为了说明 GUI 应用程序比您所指出的要多得多 - 您不仅要创建一个窗口,还必须注意它。您的问题并不清楚您的意图,但无论您尝试做什么,Carbon 几乎肯定不是答案。如果您想创建一个基本应用程序,在 Xcode 中创建一个新的 macOS 项目将为您提供所需的一切。如果您想在您的应用程序中使用 C++,请知道您可以很容易地将 C++ 与 Objective-C 混合使用,并且与 Swift 代码集成也应该非常简单。