2009-05-12 8 views
8

Tüm pencerelerin listesini almak için CGWindowListCopyWindowInfo kullanıyorum. Ekranın sol üst köşesi olan kökü esas alarak her pencerenin koordinatlarını verir.Kakao co-ord'larını nasıl sola dönüştürebilirim == origin to left left == origin

NSWindow'un setFrame yöntemini kullanırsam, koordinatlar, kaynağın alt solunda ekranın sol alt köşesine dayalı olarak koordine edilir.

Birinden diğerine dönüştürmenin temiz ve güvenilir bir yolu nedir?

Eklendi: Temiz ve güvenilir olarak, kullanıcının birden çok ekrana sahip olup olmadığına veya Spaces kullanıp kullanmadığına bakılmaksızın çalışacak bir şey kastediyorum. Kütüphane API'lerini kullanarak bilinen bir deyim olması gerektiğini düşünüyorum. Bir NSAffineTransform kullanarak öneririm

NSRect boundsInWindow = [myView convertRect:[myView bounds] toView:nil]; 
NSRect visibleRectInWindow = [myView convertRect:[myView visibleRect] toView:nil]; 

// Flip Y to convert NSWindow coordinates to top-left-based window coordinates. 
float borderViewHeight = [[myView window] frame].size.height; 
boundsInWindow.origin.y = borderViewHeight - NSMaxY(boundsInWindow); 
visibleRectInWindow.origin.y = borderViewHeight - NSMaxY(visibleRectInWindow); 

cevap

10

Matematik oldukça güvenilirdir . Varsayılan orijine göre çizerseniz ve sonra bir dönüşüme görünüm uygularsanız, esasen bir şeyleri birer birer çevirebilirsiniz.

+1

Not: Pencere koordinatları her zaman ana ekranla göründüğü (pencerenizin ekran özelliğine göre değil) –

4

:

yFromBottom = screenHeight - windowHeight - yFromTop 

Ana ekran yüksekliği

[[[NSScreen screens] objectAtIndex:0] frame].size.height 
+1

bunun bir örneğini görebilir miyim? –

İlgili konular