2014-01-16 3 views
0

Я создаю приложение для какао OS X, и я не использую конструктор интерфейса (по разным причинам). У меня есть приложение для загрузки меню, заголовка и главного окна, но я не могу понять, как добавить кнопки стоп-сигнала в строку заголовка (программно).Как добавить кнопки стоп-сигнала в приложение OS X программно

Мой AppDelegate.m выглядит следующим образом:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    MainViewController *mVC = [MainViewController new]; 
    [mVC showMainViewController]; 
} 

Тогда код в MainViewController затем создает меню, окно и загружает приложение, следующим образом:

// 
// MainViewController.m 
// TestApp 
// 

#import "MainViewController.h" 

@implementation MainViewController 

@synthesize menubar; 
@synthesize appMenu; 
@synthesize appMenuItem; 
@synthesize quitMenuItem; 
@synthesize appName; 
@synthesize quitTitle; 
@synthesize window; 
@synthesize homeViewController; 
@synthesize resolutionHeight; 
@synthesize resolutionWidth; 
@synthesize width; 
@synthesize height; 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     appName = @"TestApp"; 
     [self setupMenubar]; 
     [self setupMainWindow]; 
    } 
    return self; 
} 

- (void)setupMenubar 
{ 
    // Set up the main menu 
    menubar = [NSMenu new]; 
    appMenu = [NSMenu new]; 
    appMenuItem = [NSMenuItem new]; 
    quitTitle = [NSString stringWithFormat:@"Quit %@", appName]; 
    quitMenuItem = [[NSMenuItem alloc] initWithTitle:quitTitle 
               action:@selector(terminate:) 
             keyEquivalent:@"q"]; 

    [menubar addItem:appMenuItem]; 
    [appMenu addItem:quitMenuItem]; 
    [appMenuItem setSubmenu:appMenu]; 
    [NSApp setMainMenu:menubar]; 
} 

- (void)setupMainWindow 
{ 
    // set the dimensions of the application 
    resolutionWidth = [[NSScreen mainScreen] frame].size.width; 
    resolutionHeight = [[NSScreen mainScreen] frame].size.height; 

    width = resolutionWidth * 0.75; 
    height = resolutionHeight * 0.75; 
    window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, width, height) 
             styleMask:NSTitledWindowMask 
              backing:NSBackingStoreBuffered defer:NO]; 
    [window cascadeTopLeftFromPoint:NSMakePoint(10, 10)]; 

    // add window buttons 
    closeButton = [NSWindow standardWindowButton:NSWindowCloseButton forStyleMask:NSTitledWindowMask]; 


    // set metadata for the window 
    [window setTitle:appName]; 
    [window makeKeyAndOrderFront:nil]; 
} 

- (void)showMainViewController 
{ 
    // Set app settings 
    [NSApplication sharedApplication]; 
    [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; 
    [NSApp activateIgnoringOtherApps:YES]; 
    [NSApp run]; 
} 

@end 

Я смотрел вокруг, и я как бы не понимаю, как действовать дальше.

+0

Мы должны видеть код, который создает окно – NSGod

+0

метод setupMainWindow, что я отправил выше код, который создает окно – marpaia

+0

Ба, не видел полосу прокрутки, лол – NSGod

ответ

2

Вы могли бы попытаться изменить способ NSWindow инициализации на следующее:

window = [[NSWindow alloc] 
      initWithContentRect:NSMakeRect(0, 0, width, height) 
         styleMask:NSTitledWindowMask | NSClosableWindowMask | 
         NSMiniaturizableWindowMask | NSResizableWindowMask 

         backing:NSBackingStoreBuffered defer:NO]; 

Я считаю, что ORing в дополнительных масках автоматически добавляет соответствующие кнопки в строку заголовка для вас: NSClosableWindowMask добавляет кнопку закрытия, NSMiniaturizableWindowMask добавляет кнопку минимизации (центр), а NSResizableWindowMask добавляет кнопку увеличения (справа).

+1

вы действительно NSGod;) Большое вам спасибо! – marpaia

+0

Чтобы немного расширить. Стандартный метод NSWindowWindowButton: возвращает ссылку на стандартные стандартные кнопки системы. Он не создает их, и в какао нет открытого API-интерфейса, чтобы создавать их помимо предоставления правильных NSWindowStyleMasks. Если вы создавали настраиваемое окно с настраиваемыми кнопками, вам нужно было бы подключить их к правому селектору и обрабатывать изменения состояния активных, неактивных, недоступных, ключевых ключей и mouseEntered mouseExited и mouseDown и, возможно, документов грязных – uchuugaka

+0

Технически вы можете использовать эти методы чтобы получить кнопки, но они не будут надлежащим образом подключены или будут реагировать на указанные изменения состояния визуально. Это либо ошибка API, либо ошибка в документации. – uchuugaka

Смежные вопросы