2010-12-20 27 views
2

ここに私の問題があります。うまくいけば私は十分にそれを説明することができます。私のデスクトップは2x2サイズのモニター(2048,1152)です。Mac Mouse Coordinates!=ウィンドウ枠?

マウスクリックを生成するために補助デバイスを使用しようとしています。私のマウスのクリックは、(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

その結果、ポイント(私はポップアップウィンドウ上にホバーすることができます)をrectに配置しません。

なぜ私のポップアップウィンドウのためのrectですか、ポイントは離れてリモートで同じですか?どのように私はそれらを同じ座標空間で得ることができますか?

おかげで、Mac上で

答えて

3

、(0,0)は左下の隅にあります。どのようにマウス座標を取得していますか?ウィンドウのフレームは画面座標になります。その点が基本座標にある場合は、比較する前にpoint = [window convertBaseToScreen:point];に電話する必要があります。ここで

はココアにマウス位置を取得するには、2つの方法があります。

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> screen heightの座標を左下の画面に表示します。 –

+1

使用しているシステムによって異なります。 Cocoa(あなたのウィンドウの場所を取得するために使用している)は0を底として使用していますが、CocoaはマウスをCocoaから取得する方法を示すために私の投稿を編集します。 – ughoavgfhw

関連する問題