неділя, 30 березня 2014 р.

Компонент интерфейса в заголовке окна

В обычной программе за отрисовку окна отвечает недокументированный класс NSThemeFrame.
Создаем окно с оутлетом window на это окно. Добавляем NSView и тоже создаем на него привязку оутлет:

Добавляем на вьюху компонент NSPopupButton, убираем флажок Bordered в Инспекторе Атрибутов. В AppDelegate.h должен быть такой код:

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate> {
    
    IBOutlet NSWindow *window;
    IBOutlet NSView *itemView;
}

- (void)composeInterface;

@end
AppDelegate.m:
#import "AppDelegate.h"

@implementation AppDelegate

- (void)awakeFromNib {
    [self composeInterface];
}

- (void)composeInterface {
    // Получаем указатель на фрейм окна
    NSView *themeFrame = [[window contentView] superview];
    
    NSRect contentWindowFrame = [themeFrame frame]; // размер фрейма окна
    NSRect itemViewFrame = [itemView frame]; // размер фрейма вьюхи
    NSRect newFrame = NSMakeRect(
                                 contentWindowFrame.size.width - itemViewFrame.size.width, // x позиция
                                 contentWindowFrame.size.height - itemViewFrame.size.height, // y позиция
                                 itemViewFrame.size.width, // ширинв
                                 itemViewFrame.size.height); // высота
    
    [itemView setFrame:newFrame];
    [themeFrame addSubview:itemView];
}

@end

Вместо NSPopupButton можна добавить любой элемент на вьюху. Главное чтобы высота компонента не была больше чем сам Title Bar.
Дальше все просто. Делаем оутлет на PopupButton, и делаем с ним все что душе угодно.

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments