2010-12-20 212 views
2

這是我的問題。希望我可以解釋得很好。我的桌面是一個2x2的顯示器(2048,1152)。Mac鼠標座標!=窗框?

我正在嘗試使用輔助設備來生成鼠標點擊。假設(0,0)是我整個桌面區域的左上角,我的鼠標點擊應該在座標(1600,1407)-ish(在「平移按鈕」上)。它將鼠標移動到正確的位置,但是當我執行CGREctContainsPoint()時),因此它給了我NO

由我的彈出窗口給出的矩形(框架)的起源是(1558,-406)?所以數學是正確的CGREctContainsPoint(),但窗口的框架應該包含點。 (甚至更多,我可以看到鼠標光標在窗口上。)

爲什麼?是因爲它是一個小孩窗戶嗎? (我的桌面的中心是在圖像的中心,每個窗口是一個不同的背景顏色。) center of my desktop is in center of the image, each window is a different background color.

我已經使用了以下嘗試:

NSRect pFrame = [_popupWindow frame]; 
NSPoint pOrigin = pFrame.origin; 
NSPoint correctedOrigin = [[_popupWindow parentWindow] convertBaseToScreen:pOrigin]; 
pFrame.origin = correctedOrigin; 

但是這給了我:

... Rect {{1488, -1529}, {439, 306}}, Point {1556.17, 1314.76}, InRect 0

作爲一個結果,它仍然沒有放置點(我可以看到懸停在彈出窗口上)的矩形。

爲什麼我的彈出窗口的矩形和點甚至不是相同的?我怎樣才能讓他們在同一個座標「空間」?

謝謝,

回答

3

在mac上,(0,0)位於左下角。你如何獲得鼠標座標?窗口的框架將在屏幕座標中,所以如果點在基準座標中,則在比較之前需要調用point = [window convertBaseToScreen:point];

這裏有兩種方式獲取可可中的鼠標位置:

NSPoint location = [NSEvent mouseLocation]; 
//already in screen coordinates, no need to convert 

//window is a variable containing your window 
NSPoint location = [window mouseLocationOutsideOfEventStream]; 
//convert to screen coordinates 
location = [window convertBaseToScreen:location]; 
+0

你確定它的左下角?如果我創建了'CGEventRef m = CGEventCreateMousEvent()',並且我將它傳遞給一個座標,其中y>屏幕高度顯示在左下角的屏幕中。 – 2010-12-20 20:20:22

+1

這取決於你使用的是什麼系統。 Carbon(你用來獲取位置的)使用top作爲0,而Cocoa(你用來獲取窗口位置)使用bottom作爲0.我將編輯我的帖子以顯示如何從可可中獲得鼠標。 – ughoavgfhw 2010-12-20 20:51:50