2015-08-06 3 views
1

Пользователь нажимает кнопку «сделать снимок экрана за 10 секунд» в своем приложении. Затем пользователь фокусирует другое приложение и делает его полноэкранным. Хотя пользователь сосредоточен в этом полноэкранном приложении, мой 10-секундный таймер теперь достигает 0. Мое приложение открывает окно с полным размером монитора, оно рисует скриншот на нем. Но теперь я хочу, чтобы окно отображалось на всех пространствах. Я попытался это:setCollectionBehavior не влияет на уже открытое окно

[window setCollectionBehavior:(16 | 1 | 256)]; 

Но это не делает окно шоу над пользователями текущего пространства (Который полноэкранное приложение) вы, ребята, знаете, Что вверх?

Просто проверить, магические числа для этих констант:

var NSWindowCollectionBehaviorStationary = 1 << 4; // 16 
var NSWindowCollectionBehaviorCanJoinAllSpaces = 1 << 0; // 1 
var NSWindowCollectionBehaviorFullScreenAuxiliary = 1 << 8; // 256 
var NSWindowCollectionBehaviorMoveToActiveSpace = 1 << 1;// 2 

Правильно ли это? Я делаю это через ctypes, поэтому приходится использовать магические числа.

Я также попытался:

[window setCanBeVisibleOnAllSpaces:YES] 

Но это не работало.

Благодаря

Edit: Так это окно уже открыто, и я не имею доступа к раскадровке и т.д., как указано в ответе ˙a2 в ниже, мы обсуждали это в чате, и мы должны вклиниться в него каким-то образом, чтобы сделать это влиять, есть ли кто-нибудь с идеями?

ответ

1

Вам нужно добавить этот код либо в вашем XIb/раскадровки, либо в вашем NSWindowController подкласс -windowDidLoad метода, либо в вашем обозначенном Инициализатором вашего NSWindow подкласса:

- (void) awakeFromNib { 
    [self setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces]; 
} 

ИЛИ

- (id)initWithContentRect:(NSRect)contentRect 
       styleMask:(NSUInteger)styleMask 
        backing:(NSBackingStoreType)bufferingType 
        defer:(BOOL)flag { 
    if (self = [super initWithContentRect:contentRect styleMask:styleMask backing:bufferingType defer:flag]) { 
     [self setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces]; 
    } 
    return self; 
} 

ИЛИ, если у вас есть NSWindowController

- (void)windowDidLoad { 
    [super windowDidLoad]; 

    [[self window] setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces]; 
} 

ИЛИ Отредактируйте файл nib и добавьте это поведение в свое окно в XCode.

+0

Ах, что делать, если окно уже имеющееся окно уже открыто, его невозможно? Я делаю это через ctypes :( – Noitidart

+1

Нет, вы не можете сделать это в существующем окне, если вы его не владеете. Не могли бы вы разработать свой подход? Не знакомы с ctypes – StefanS

+0

Ах спасибо, что вы используете firefox? Можете ли вы общаться с чатом stackoverflow? :) – Noitidart

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