[英]Converting between Cocoa and Carbon coordinates?
我正在尋找一種可靠的算法(我的意思是在所有多監視器配置中工作),以將可可點/直方圖轉換為碳當量並進行反向操作。
我已經用谷歌搜索,但是找不到能正常工作的東西。
在此先感謝您的幫助。
問候,
經過幾次迭代,我在NSScreen
上NSScreen
了以下類別:
+ (NSScreen*) screenWithPoint: (NSPoint) p
{
for (NSScreen *candidate in [NSScreen screens])
if (NSPointInRect(p, [candidate frame]))
return candidate;
return nil;
}
+ (NSScreen*) screenWithMenuBar
{
return [self screenWithPoint:NSZeroPoint];
}
+ (float) menuScreenHeight
{
return NSMaxY([[self screenWithMenuBar] frame]);
}
+ (CGPoint) carbonPointFrom: (NSPoint) cocoaPoint
{
return CGPointMake(cocoaPoint.x, [self menuScreenHeight] - cocoaPoint.y);
}
+ (NSPoint) cocoaPointFrom: (CGPoint) carbonPoint
{
return NSMakePoint(carbonPoint.x, [self menuScreenHeight] - carbonPoint.y);
}
即使在多個顯示器上也可以正常工作。
Apple的UIElementInspector的代碼中發布的代碼有問題,因為它沒有考慮非主屏幕的來源。 固定(和重構)的代碼如下所示:
+ (CGPoint)carbonScreenPointFromCocoaScreenPoint:(NSPoint)cocoaPoint {
NSScreen* foundScreen = nil;
NSRect screenFrame;
for (NSScreen* screen in [NSScreen screens]) {
screenFrame = [screen frame];
if (NSPointInRect(cocoaPoint, screenFrame)) {
foundScreen = screen;
break;
}
}
if (! foundScreen) return CGPointMake(0.0, 0.0);
return CGPointMake(cocoaPoint.x,
screenFrame.origin.y + screenFrame.size.height - cocoaPoint.y);
}
或從UIElementInspector示例項目中獲取Apple的代碼:
+ (CGPoint)carbonScreenPointFromCocoaScreenPoint:(NSPoint)cocoaPoint
{
NSScreen *foundScreen = nil;
CGPoint thePoint;
for (NSScreen *screen in [NSScreen screens])
{
if (NSPointInRect(cocoaPoint, [screen frame]))
{
foundScreen = screen;
}
}
if (foundScreen)
{
CGFloat screenHeight = [foundScreen frame].size.height;
thePoint = CGPointMake(cocoaPoint.x, screenHeight - cocoaPoint.y - 1);
}
else
{
thePoint = CGPointMake(0.0, 0.0);
}
return thePoint;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.