После многих часов исследований я не могу найти ответ, который адекватно отвечает на этот вопрос, хотя я и близко подошел.
Моя основная задача - сгенерировать MEX-функцию для Matlab, которая создает NSWindow с NSView, который появляется на экране. Это включает создание гибридного файла Obj-C ++ во время компиляции, что было сделано ранее, так что это не проблема.
Тем не менее, все реализации, с которыми я сталкивался, основаны на библиотеках OpenGL, которые я хочу избегать. Библиотеки OpenGL обычно используются для генерации контекста, но здесь я просто хочу, чтобы простой NSView заполнял окно. Поэтому в идеале реализация должна использовать только платформы Cocoa, Framework и Appkit.
В настоящее время я сохраняю следующий код в файле C:
#include "mex.h"
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
#import <AppKit/AppKit.h>
/* The gateway function */
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
// Create shared application instance
[NSApplication sharedApplication];
// Define content rect
NSRect contentRect = NSMakeRect(0, 0, 500, 500);
// Create window
NSWindow* window = [[NSWindow alloc] initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:false];
// Window settings
[window setBackgroundColor:[NSColor blackColor]];
[window setExcludedFromWindowsMenu:YES];
[window setAlphaValue:1.0];
[window setOpaque:true];
[NSApp activateIgnoringOtherApps:YES];
[window makeKeyAndOrderFront:window];
// Display window
[window display];
// Add view to window
CGRect winRect = [[window contentView] bounds];
NSView* maxView = [[NSView alloc] initWithFrame: winRect];
[maxView setBackgroundColor:[NSColor blackColor]];
[[window contentView] addSubview:maxView];
// Update display
[[window contentView] display];
[window display];
}
... и скомпилировать код в Matlab как:
mex create_window.c -v CFLAGS='$CFLAGS -ObjC++' LDFLAGS='$LDFLAGS -framework Cocoa -framework Foundation -framework AppKit'
Это компилирует и запускает, и если вы проверяете объект NSWindow, он говорит, что он видим. Однако на экране ничего не появляется. Я предполагаю, что NSWindow или NSView не сохраняются, но я не смог решить эту проблему.
Опять же, это должно быть возможно, если другие используют OpenGL для генерации контекста для окна.
Любая помощь будет принята с благодарностью!