В рамках более широкого проекта я реализую свое собственное управление окнами для приложения Cocoa.При компиляции я использую флаг «target c ++», потому что большая часть кодовой базы находится в c ++.
Я поместил некоторый код заглушки в мой main.cpp, чтобы открыть окно, но значок окна непроисходит в доке приложений и не поднимается на передний план стека окон.
У меня есть этот бит в моем main.cpp:
main.cpp
TestAppDelegate* appDel = [TestAppDelegate alloc];
[NSApp setDelegate:appDel];
NSApplication* app = [NSApplication sharedApplication];
app.delegate = appDel;
[app run];
return NSApplicationMain(argc, argv);
И мой объект AppDelegate выглядит следующим образом
test.h
@interface TestAppDelegate : NSObject <NSApplicationDelegate, NSWindowDelegate> {
NSWindow * win;
}
@end
test.cpp
#include "test.h"
@implementation TestAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
NSRect rect;
rect.origin.x = 0;
rect.origin.y = 0;
rect.size.width = 500;
rect.size.height = 500;
unsigned int style = (NSWindowStyleMaskTitled|NSWindowStyleMaskClosable|NSWindowStyleMaskMiniaturizable);
NSWindow* win = [[NSWindow alloc] initWithContentRect:rect styleMask:style backing:NSBackingStoreBuffered defer:FALSE];
NSButton* butan = [NSButton buttonWithTitle:@"SomeText" target:nil action:nil];
butan.frame = NSMakeRect(20, 20, 100, 30);
butan.title = [NSString stringWithUTF8String:"Things"];
[win.contentView addSubview:butan];
[win makeKeyAndOrderFront:nil];
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
// Insert code here to tear down your application
}
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender {
return YES;
}
@end
Пока это куча бесполезного тестового кода, ноокно открывается, хотя оно появляется позади редактора Xcode.Кнопка реагирует на нажатия, и окно не заморожено, поскольку я могу свободно перемещать его.
Моя проблема в том, что окно не кажется "активным".Это не в доке, я не могу «команда + вкладка +, чтобы добраться до него, и когда я нажимаю на него и фокусирую его, верхние левые кнопки не загораются, как другие приложения.
Что такоеЯ забыл здесь?
В качестве ссылки, я смотрю на источник SDL , который мой проект в основном использует, за исключением этого небольшого эксперимента. Если я запускаю графическое окно с SDL, котороеиспользует какао в качестве драйвера. Я увижу окно в доке, и оно будет более «активным», чем мое маленькое окно.