2013-12-11 3 views
1
- (void) GetClientRect 

    NSArray *screenArray = [NSScreen screens]; 
    NSScreen *mainScreen = [NSScreen mainScreen]; 
    unsigned screenCount = [screenArray count]; 
    unsigned index = 0; 

    for (index; index < screenCount; index++) 
    { 
     NSScreen *screen = [screenArray objectAtIndex: index]; 
     NSRect screenRect = [screen visibleFrame]; 
     NSString *mString = ((mainScreen == screen) ? @"Main" : @"not-main"); 

     NSLog(@"Screen #%d (%@) Frame: %@", index, mString, NSStringFromRect(screenRect)); 
    } 
} 

Вышеуказанный метод используется для получения рамки для главного экрана. Но я хочу, чтобы метод возвращал размер экрана NSWindow, чей kCGWindowNumber был передан. Любая идея?!Как получить размер NSWindow от kCGWindowNumber?

ответ

1

Почему вы работаете с CGWindowID (что я предполагаю, что вы имели в виду kCGWindowNumber)? В большинстве случаев это очень неестественно.

В любом случае, вы можете позвонить CGWindowListCopyWindowInfo(0, theWindowID) и изучить словарь в первом элементе возвращаемого массива. Используйте ключ kCGWindowBounds, чтобы получить представление словаря прямоугольника границ, а затем CGRectMakeWithDictionaryRepresentation(), чтобы преобразовать его в CGRect.


Вы ищете как преобразовать NSWindow-frame, который находится в системе координат Какао, в Core Graphics системы координат? Система координат Какао имеет начало в нижнем -левом первичном дисплее, при этом Y увеличивается в направлении вверх. Система координат Core Graphics имеет начало координат на вверху - левая часть основного дисплея, при этом Y увеличивается в направлении вниз.

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

NSWindow* window = /* ... comes from wherever ... */; 
NSRect frame = window.frame; 
frame.origin.y = NSMaxY([NSScreen.screens.firstObject frame]) - NSMaxY(frame); 
CGRect cgbounds = NSRectToCGRect(frame); 
+0

Привет @Ken причина мне нужно получить от '' NSWindow' к CGWindowID' потому, что я пытаюсь переместить вновь созданное окно, в другое рабочее пространство (Firefox создает новое окно и дает мне «NSWindow'), возможно ли получить' kCGWindowNumber' из 'NSWindow'? Я использую этот метод для перемещения окна в другое рабочее пространство - http://stackoverflow.com/a/2368945/1828637 – Noitidart

+0

Я думал использовать ['[NSWindow windowNumber]'] (https://developer.apple.com/library /mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/index.html#//apple_ref/occ/instp/NSWindow/windowNumber), но документы предупреждают его не то же самое число. – Noitidart

+1

Нет документального способа получить 'CGWindowID' из' NSWindow'. Непонятно, что предупреждение '-windowNumber' действительно касается' CGWindowID' или другого номера, используемого оконным сервером. Даже если это так, это может означать, что '-windowNumber' не * всегда * равно окну' CGWindowID', потому что это отрицательно для окон вне экрана. На практике многие люди полагались на то, что для окон на экране «-windowNumber» совпадает с «CGWindowID». –

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