Objective-C プログラミング CGWarpMouseCursorPosition関数について質問します。

マウスカーソルを移動させる CGWarpMouseCursorPosition (CGPoint newCursorPosition) 関数の引き数 newCursorPosition は

リファレンスによれば in the global display coordinate space となっていますが、これはスクリーン座標とは異なるものなのでしょうか?

と言いますのも、下記のようなプログラムにおいて


mouseLocation = [NSEvent mouseLocation]; スクリーン座標

CGWarpMouseCursorPosition (mouseLocation);


任意の場所においてマウスカーソルの位置を取得して、そのまま CGWarpMouseCursorPosition 関数で出力した場合、

取得時のマウスカーソルの位置より Y座標方向にずれができます。

CGWarpMouseCursorPosition 関数の引き数がスクリーン座標でないのであれば、どのように補正すればよろしいのでしょうか?

iMac, OS X Yosemite (10.10)

投稿日 2014/12/27 20:10

返信
返信: 4

2014/12/30 03:20 MC-8 への返信

NS の座標点 p を CG の座標点 q に変換するだけなら、プライマリスクリーンの高さから p.y を引いた値を q.y にすればよいです。


q.x = p.x q.y = [[[NSScreen screens] objectAtIndex: 0] frame].size.height - p.y



所与の NSEvent に対応する CGEvent の位置を求めるなら、


NSEvent *ne; // given event CGEventRef e = [ne CGEvent]; CGPoint q = CGEventGetLocation(e);



マウスの現在位置の CG 座標を求めるだけなら、


CGEventRef e = CGEventCreate(NULL); CGPoint q = CGEventGetLocation(e); CFRelease(e);



等々。




E.g.,



#!/bin/bash TEMPDIR="$(mktemp -d ~/desktop/temp_XXXX)" && cd "$TEMPDIR" || exit cat <<'EOF' > main.m #import <Foundation/Foundation.h> #import <AppKit/AppKit.h> #import <ApplicationServices/ApplicationServices.h> int main (int argc, char **argv) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // screen coordinates NSPoint p = [NSEvent mouseLocation]; fprintf(stdout, "%-6s x=%.1f, y=%.1f\n", "NS", p.x, p.y); // convert screen coordinates to global display coordinates NSRect r = [[[NSScreen screens] objectAtIndex: 0] frame]; p.y = r.size.height - p.y; fprintf(stdout, "%-6s x=%.1f, y=%.1f\n", "CG/NS", p.x, p.y); // global display coordinates CGEventRef e = CGEventCreate(NULL); CGPoint q = CGEventGetLocation(e); CFRelease(e); fprintf(stdout, "%-6s x=%.1f, y=%.1f\n", "CG", q.x, q.y); [pool release]; return 0; } EOF CC=/usr/bin/gcc "$CC" \ -framework Foundation \ -framework AppKit \ -framework ApplicationServices \ -o ns-cg-coord \ main.m ./ns-cg-coord

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

Objective-C プログラミング CGWarpMouseCursorPosition関数について質問します。

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。