Cocoa 的问题在于,它主要使用 Swift 和 Objective-C,导致 Cocoa 几乎不可能链接到 c++
我尝试了一堆代码片段,但由于某种无法解释的原因,它们都不起作用。但我的逻辑是 Objective-C++。显然,您可以在 Objective-C++ 文件中将 Objective-C 与 C++ 结合起来。 我尝试了一些代码,但没有一个能很好地工作
为了帮助您入门,以下源代码将从使用 .mm 文件扩展名(即 wnd.mm)的 cpp 类创建 Cocoa 窗口。它不包括到 cpp 文件的链接。该演示是使用 clang 从终端编译的。
// compile and run in Terminal
// $ clang wnd.mm -framework Cocoa -o guiPlus && ./guiPlus
#include <Cocoa/Cocoa.h>
NSTextView *txtView;
//prints formatted NSString with line feed
void MyLog(NSString *formatString, ... ) {
va_list ap;
va_start( ap, formatString );
NSString *format = [[NSString alloc] initWithFormat:@"%@\n", formatString];
NSString *str = [[NSString alloc] initWithFormat:format arguments:ap];
[txtView insertText:str replacementRange:NSMakeRange( [[txtView string] length], 0 )];
va_end( ap );
}
class Window {
public:
void buildWnd();
void printContent();
private:
NSWindow *window;
};
void Window::buildWnd() {
#define _wndW 600
#define _wndH 550
window = [ [ NSWindow alloc ] initWithContentRect:NSMakeRect( 0, 0, _wndW, _wndH )
styleMask: NSWindowStyleMaskClosable | NSWindowStyleMaskTitled
backing:NSBackingStoreBuffered defer:YES];
[window center];
[window setTitle: @"Test window" ];
[window makeKeyAndOrderFront:nil];
// **** NSTextView **** //
txtView = [[NSTextView alloc] initWithFrame:NSMakeRect(0,60,_wndW,_wndH-60)];
[txtView setFont:[NSFont fontWithName:@"Lucida Grande" size:14]];
[[window contentView]addSubview:txtView];
NSLog(@"Kilroy was here.");
// **** Quit btn **** //
NSButton *quitBtn = [[NSButton alloc]initWithFrame:NSMakeRect( _wndW - 60, 10, 40, 40 )];
[quitBtn setBezelStyle:NSBezelStyleCircular ];
[quitBtn setTitle: @"Q" ];
[quitBtn setAction:@selector(terminate:)];
[[window contentView] addSubview: quitBtn];
}
void Window::printContent(){
MyLog(@"Hello world!!");
MyLog(@"window = %@", window);
}
int main () {
[NSApplication sharedApplication];
Window w;
w.buildWnd();
w.printContent();
[NSApp run];
return 0;
}