在flex里面TitleWindow的拖动范围默认是不控制的,但是我们经常需要将其约束在整个应用程序的主窗口内,我找了半天也没有找到相关属性设置,只能重写,下面是重写的代码:
override protected function startDragging(event:MouseEvent):void
{
regX = event.stageX - x;
regY = event.stageY - y;
var sbRoot:DisplayObject = systemManager.getSandboxRoot();
sbRoot.addEventListener(
MouseEvent.MOUSE_MOVE, systemManager_mouseMoveHandler, true);
sbRoot.addEventListener(
MouseEvent.MOUSE_UP, systemManager_mouseUpHandler, true);
sbRoot.addEventListener(
SandboxMouseEvent.MOUSE_UP_SOMEWHERE, stage_mouseLeaveHandler);
// add the mouse shield so we can drag over untrusted applications.
systemManager.deployMouseShields(true);
}
protected override function stopDragging():void
{
var sbRoot:DisplayObject = systemManager.getSandboxRoot();
sbRoot.removeEventListener(
MouseEvent.MOUSE_MOVE, systemManager_mouseMoveHandler, true);
sbRoot.removeEventListener(
MouseEvent.MOUSE_UP, systemManager_mouseUpHandler, true);
sbRoot.removeEventListener(
SandboxMouseEvent.MOUSE_UP_SOMEWHERE, stage_mouseLeaveHandler);
regX = NaN;
regY = NaN;
systemManager.deployMouseShields(false);
}
private function systemManager_mouseMoveHandler(event:MouseEvent):void
{
event.stopImmediatePropagation();
if (isNaN(regX) || isNaN(regY))
{
return;
}
var x:Number = event.stageX - regX;
var y:Number = event.stageY - regY;
var maxX:Number = this.stage.nativeWindow.width - this.width;
var maxY:Number = this.stage.nativeWindow.height - this.height;
//超出范围 ,停止移动
if(x < 0) x = 0;
if(y < 0) y = 0;
if(x > maxX) x = maxX;
if(y > maxY) y = maxY;
move(x, y);
}
private function systemManager_mouseUpHandler(event:MouseEvent):void
{
// trace("systemManager_mouseUpHandler: " + event);
if (!isNaN(regX))
stopDragging();
}
private function stage_mouseLeaveHandler(event:Event):void
{
// trace("stage_mouseLeaveHandler: " + event);
if (!isNaN(regX))
stopDragging();
}
//拖动相关
private var regX:Number;
private var regY:Number;