2009-05-12 15 views
8

से कोको कोऑर्ड को कैसे परिवर्तित करूं मैं सभी विंडोज़ की सूची प्राप्त करने के लिए CGWindowListCopyWindowInfo का उपयोग करता हूं। यह मुझे स्क्रीन के शीर्ष-बाएं की उत्पत्ति के आधार पर प्रत्येक विंडो का समन्वय देता है।मैं शीर्ष बाएं == मूल से नीचे बाएं == मूल

यदि मैं NSWindow की सेटफ्रेम विधि का उपयोग करता हूं, तो स्क्रीन के नीचे-बाएं मूल के आधार पर समन्वय।

एक से दूसरे में परिवर्तित करने के लिए एक साफ, विश्वसनीय तरीका क्या है?

जोड़ा गया: स्वच्छ और भरोसेमंद से मेरा मतलब है कि उपयोगकर्ता को कई स्क्रीन हैं या रिक्त स्थान का उपयोग कर रहे हैं या नहीं। मुझे लगता है कि पुस्तकालय एपीआई का उपयोग कर एक ज्ञात मुहावरे होना चाहिए।

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); 

उत्तर

10

गणित काफी विश्वसनीय :-)

yFromBottom = screenHeight - windowHeight - yFromTop 

मुख्य स्क्रीन ऊंचाई है

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

नोट: ऐसा लगता है कि विंडो निर्देशांक हमेशा मुख्य स्क्रीन से संबंधित होते हैं (आपकी विंडो की स्क्रीन प्रॉपर्टी पर नहीं) –

2

कुछ इस तरह (from here) का प्रयास है । यदि आप डिफ़ॉल्ट उत्पत्ति के संबंध में आकर्षित करते हैं और फिर दृश्य में एक परिवर्तन लागू करते हैं, तो आप अनिवार्य रूप से चीजों को एक-दूसरे में फिसल सकते हैं।

4

मैं एक NSAffineTransform उपयोग करने का सुझाव होगा:

+1

क्या मैं इसका नमूना देख सकता हूं? –

संबंधित मुद्दे