Положение мыши на экране в flex - PullRequest
2 голосов
/ 29 мая 2009

Я пытаюсь получить фактические координаты мыши на экране, чтобы я мог создать собственное окно в этой позиции, но я не могу найти правильный способ сделать это правильно.

Я пробовал разные вещи, самое близкое, что у меня есть на данный момент:

this.contentMouseX and this.contentMouseY

Это дает мне координаты на текущем этапе, что хорошо, затем я добавляю к этому:

NativeApplication.nativeApplication.activeWindow.x and activeWindow.y

Что близко, но это не учитывает строку заголовка приложения.

Должен быть более простой и простой способ сделать это, я уверен, кто-нибудь может дать совет, потому что я не могу найти его в Google?

Я пробовал localToGlobal, который не работает, кажется, что «глобальный» означает в приложении, а не глобальный для экрана, который мне не нужен. Вот пример, который показывает сбой ...

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.core.Application;

            private function click(evt:MouseEvent):void
            {
                var pt:Point = new Point( this.contentMouseX, this.contentMouseY );
                var global:Point = Application.application.localToGlobal( pt );

                trace( "local_x: " + pt.x + " x " + pt.y );
                trace( "global_x: " + global.x + " x " + global.y );
            }
        ]]>
    </mx:Script>

    <mx:HBox horizontalAlign="center" width="100%">
        <mx:Button id="butt" label="Click" click="click(event)" />
    </mx:HBox>
</mx:WindowedApplication>

Ответы [ 3 ]

5 голосов
/ 29 мая 2009

После фальстарта ... Извините за это ...

Вы можете использовать stage.nativeWindow.globalToScreen - это будет делать то, что вам нужно.

С точки зрения положения окна (для полноты) - вы также можете посмотреть в stage.nativeWindow.x и stage.nativeWindow.y - это даст вам позицию для приложения на рабочем столе - оттуда - Вы можете расположить относительно этой точки.

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.core.Application;

private function click(evt:MouseEvent):void
{
  var pt:Point = new Point( this.butt.x, this.butt.y );
  var global:Point = Application.application.localToGlobal( pt );

  trace( "local_x: " + pt.x + " x " + pt.y );
  trace( "global_x: " + global.x + " x " + global.y );

  var p:Point = stage.nativeWindow.globalToScreen(new Point(this.butt.x, this.butt.y));

  trace(p.x + " x " + p.y);
  var na:NativeWindow = new NativeWindow(new NativeWindowInitOptions());
  na.visible = true;
  na.width = 100;
  na.height = 100;
  na.x = p.x;
  na.y = p.y;
  na.activate();

}
]]>
</mx:Script>


<mx:Button x="10" y="10" id="butt" label="Click" click="click(event)" />

</mx:WindowedApplication>
0 голосов
/ 29 мая 2009

Работает ли это:

private function click(evt:MouseEvent):void
{
  var pt:Point = new Point( evt.localX, evt.localY );
  var global:Point = new Point( evt.stageX, evt.stageY);

  trace( "local_x: " + pt.x + " x " + pt.y );
  trace( "global_x: " + global.x + " x " + global.y );
}
0 голосов
/ 29 мая 2009
//get the application level mouse coordinate
var local_x : int = this.mouseX; 

//convert this x value into a global coordinate
var pt : Point = new Point(local_x, 0);
var global_x : int = this.localToGlobal(pt).mouseX;
...